Name: series-workflowc4k72 Phase: Failed StartedAt: 2026-08-14 02:04:35 +0000 UTC FinishedAt: 2026-08-14 02:24:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc4k72[0] Phase: Succeeded StartedAt: 2026-08-14 02:04:35 +0000 UTC FinishedAt: 2026-08-14 02:24:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc4k72[0].run-triage Phase: Succeeded StartedAt: 2026-08-14 02:04:35 +0000 UTC FinishedAt: 2026-08-14 02:24:47 +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+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIyNCBldGhlcm5ldCBzd2l0Y2ggY2hpcCB0byB0aGUgeXQ5MjF4IERTQSBkcml2ZXIgYW5kIGEgY29ycmVzcG9uZGluZyBEU0EgdGFnIGRyaXZlci4gVGhlIGRyaXZlciBpcyBhbiBNRElPIGRyaXZlciB0aGF0IHJlbGllcyBvbiBEZXZpY2UgVHJlZSAoT0YgbWF0Y2ggZGF0YSkgdG8gcHJvYmUsIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgb3IgZHluYW1pY2FsbHkgaW5qZWN0YWJsZSBpbiBzdGFuZGFyZCB4ODZfNjQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBGdXJ0aGVybW9yZSwgdGhlIERTQSB0YWcgZHJpdmVyIGNhbm5vdCBiZSByZWFjaGVkIGJlY2F1c2Ugbm8gZW11bGF0ZWQgRFNBIHN3aXRjaCAobGlrZSBkc2FfbG9vcCkgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBuZXdseSBhZGRlZCBEU0FfVEFHX1BST1RPX1lUOTIyWCBwcm90b2NvbC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmI5MzFlOTAyZjE4MWVhMTgyNTBiNTlhYzk0NzM4MjVkZDFmMmIxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDAyOjIxOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmMuLjY5YzgyNGZkOTViZjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbkBAIC0xNTksMTEgJiM0MzsxNTksMTEgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4gXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MlhYXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFlUOTIxNSBhbmQgWVQ5MjI0IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MlhYXG4gXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuIFx0aGVscFxuLVx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgYW5kIFlUOTIyNCBldGhlcm5ldCBzd2l0Y2hcbiBcdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBkMjk3NWJhZGZmYzA5Li4xOGMyY2VlZjA5YTUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNCw3ICYjNDM7MTQsNyBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTykgJiM0Mzs9IGxhbjkzMDNfbWRpby5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1NQSSkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xuLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vXG4mIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTJYWCkgJiM0Mzs9IHl0OTIxeC5vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBiNTMvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBoaXJzY2htYW5uL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbGFudGlxL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuaW5kZXggMTU5YjE2NjA2ZjZjYS4uNzQyNTU1Zjg3ODE5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5AQCAtMTQ4LDEwICYjNDM7MTQ4LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXHRcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDgpLFxuIFx0XHRZVDkyMVhfUE9SVF9NQVNLX0VYVDAgfCBZVDkyMVhfUE9SVF9NQVNLX0VYVDEsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdFwmIzM0O1lUOTIyNFwmIzM0OywgWVQ5MjI0X01BSk9SLCAwLCAwLFxuJiM0MztcdFx0MHgxZjEsXG4mIzQzO1x0XHQweDAsXG4mIzQzO1x0fSxcbiBcdHt9XG4gfTtcbiBcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXHRcJiMzNDt5dDkyMXhcJiMzNDtcbiYjNDM7I2RlZmluZSBZVDkyWFhfTkFNRVx0XCYjMzQ7eXQ5Mnh4XCYjMzQ7XG4gXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuQEAgLTU2MCwxMCAmIzQzOzU2NSwxMiBAQCB5dDkyMXhfaW50aWZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IHZhbClcbiBzdGF0aWMgaW50IHl0OTIxeF9tYnVzX2ludF9yZWFkKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZylcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtYnVzLVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IG1heF9wb3J0cztcbiBcdHUxNiB2YWw7XG4gXHRpbnQgcmVzO1xuIFxuLVx0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMVhfUE9SVF9OVU0pXG4mIzQzO1x0bWF4X3BvcnRzID0gcHJpdi1cdTAwM2VjaGlwX2luZm8tXHUwMDNlcG9ydHM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNlPSBtYXhfcG9ydHMpXG4gXHRcdHJldHVybiBVMTZfTUFYO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbkBAIC01NzksOSAmIzQzOzU4NiwxMSBAQCBzdGF0aWMgaW50XG4geXQ5MjF4X21idXNfaW50X3dyaXRlKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IGRhdGEpXG4ge1xuIFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcdGludCBtYXhfcG9ydHM7XG4gXHRpbnQgcmVzO1xuIFxuLVx0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMVhfUE9SVF9OVU0pXG4mIzQzO1x0bWF4X3BvcnRzID0gcHJpdi1cdTAwM2VjaGlwX2luZm8tXHUwMDNlcG9ydHM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNlPSBtYXhfcG9ydHMpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbkBAIC01OTYsMTkgJiM0Mzs2MDUsMjEgQEAgeXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqbWJ1cztcbiYjNDM7XHRpbnQgbWF4X3BvcnRzO1xuIFx0aW50IHJlcztcbiBcbiBcdG1idXMgPSBkZXZtX21kaW9idXNfYWxsb2MoZGV2KTtcbiBcdGlmICghbWJ1cylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzQzO1x0bWF4X3BvcnRzID0gcHJpdi1cdTAwM2VjaGlwX2luZm8tXHUwMDNlcG9ydHM7XG4gXHRtYnVzLVx1MDAzZW5hbWUgPSBcJiMzNDtZVDkyMXggaW50ZXJuYWwgTURJTyBidXNcJiMzNDs7XG4gXHRzbnByaW50ZihtYnVzLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwmIzM0OyVzXCYjMzQ7LCBkZXZfbmFtZShkZXYpKTtcbiBcdG1idXMtXHUwMDNlcHJpdiA9IHByaXY7XG4gXHRtYnVzLVx1MDAzZXJlYWQgPSB5dDkyMXhfbWJ1c19pbnRfcmVhZDtcbiBcdG1idXMtXHUwMDNld3JpdGUgPSB5dDkyMXhfbWJ1c19pbnRfd3JpdGU7XG4gXHRtYnVzLVx1MDAzZXBhcmVudCA9IGRldjtcbi1cdG1idXMtXHUwMDNlcGh5X21hc2sgPSAodTMyKX5HRU5NQVNLKFlUOTIxWF9QT1JUX05VTSAtIDEsIDApO1xuJiM0MztcdG1idXMtXHUwMDNlcGh5X21hc2sgPSAodTMyKX5HRU5NQVNLKG1heF9wb3J0cyAtIDEsIDApO1xuIFxuIFx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcbiBcdGlmIChyZXMpXG5AQCAtNDc0OCw2ICYjNDM7NDc1OSwxMyBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbiBcdGludCByZXM7XG4gXG4mIzQzO1x0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRwcC1cdTAwM2VpbmRleCA9IGk7XG4mIzQzO1x0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiBcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuQEAgLTQ4NjksMTE0ICYjNDM7NDg4Nyw5MzUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XG4gXHQuc2V0dXBcdFx0XHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXG4gfTtcbiBcbi1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3N0YXRpYyBpbnQgeXQ5MjJ4X3BvcnRfZG93bihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuIHtcbi1cdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XG4mIzQzO1x0dTMyIG1hc2s7XG4mIzQzO1x0aW50IHJlcztcbiBcbi1cdGlmICghcHJpdilcbi1cdFx0cmV0dXJuO1xuJiM0MztcdC8qIG1hYyBmb3JjZSBkb3duICovXG4mIzQzO1x0bWFzayA9IFlUOTIyWF9QT1JUX0xJTksgfCBZVDkyMlhfUE9SVF9SWF9NQUNfRU4gfFxuJiM0MztcdCAgICAgICBZVDkyMlhfUE9SVF9UWF9NQUNfRU4gfCBZVDkyMlhfUE9SVF9MSU5LX0FOO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhwcml2LCBZVDkyMlhfUE9SVG5fQ1RSTChwb3J0KSwgbWFzayk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0LyogTmVlZCBmb3JjZSBvcCB0byBtYWtlIHNvZnQgY29uZmlndXJhdGlvbiBlZmZlY3RpdmUgKi9cbiYjNDM7XHRtYXNrID0gWVQ5MjJYX1BPUlRfRk9SQ0VfT1A7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfUE9SVG5fQ1RSTChwb3J0KSwgbWFzayk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4gXG4tXHRkc2Ffc3dpdGNoX3NodXRkb3duKFx1MDAyNnByaXYtXHUwMDNlZHMpO1xuJiM0MztcdC8qIGRpc2FibGUgZW5fcGh5ICovXG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfVkFMVUUsIEJJVChwb3J0KSk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfRU5fUEhZX09WRVJXUklURSwgQklUKHBvcnQpKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO3l0OTIyeF9waHlsaW5rX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuJiM0MztcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4ge1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRwLVx1MDAzZWRzKTtcbiYjNDM7XHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuJiM0MztcdGludCByZXM7XG4gXG4tXHRpZiAoIXByaXYpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIyeF9wb3J0X2Rvd24ocHJpdiwgcG9ydCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuIFxuLVx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGktLSBcdTAwM2UgMDsgKSB7XG4tXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRkZXZfZXJyKGRwLVx1MDAzZWRzLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvICVzIHBvcnQgJWQ6ICVpXFxuXCYjMzQ7LCBcJiMzNDticmluZyBkb3duXCYjMzQ7LFxuJiM0MztcdFx0XHRwb3J0LCByZXMpO1xuJiM0Mzt9XG4gXG4tXHRcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHAtXHUwMDNlbWliX3JlYWQpO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIyeF9wb3J0X3VwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHVuc2lnbmVkIGludCBtb2RlLFxuJiM0MztcdCAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQsIGludCBkdXBsZXgsXG4mIzQzO1x0ICAgICAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHNwZWVkKSB7XG4mIzQzO1x0Y2FzZSBTUEVFRF8xMDpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgU1BFRURfMTAwOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9QT1JUX1NQRUVEXzEwMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgU1BFRURfMTAwMDpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTUEVFRF8yNTAwOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9QT1JUX1NQRUVEXzI1MDA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNQRUVEXzEwMDAwOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9QT1JUX1NQRUVEXzEwMDAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuJiM0MztcdGlmIChkdXBsZXggPT0gRFVQTEVYX0ZVTEwpXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIyWF9QT1JUX0RVUExFWF9GVUxMO1xuJiM0MztcdGlmICh0eF9wYXVzZSlcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjJYX1BPUlRfVFhfUEFVU0U7XG4mIzQzO1x0aWYgKHJ4X3BhdXNlKVxuJiM0MztcdFx0Y3RybCB8PSBZVDkyMlhfUE9SVF9SWF9QQVVTRTtcbiYjNDM7XHRjdHJsIHw9IFlUOTIyWF9QT1JUX1JYX01BQ19FTiB8IFlUOTIyWF9QT1JUX1RYX01BQ19FTiB8XG4mIzQzO1x0XHRZVDkyMlhfUE9SVF9DRkdfVFhfRU4gfCBZVDkyMlhfUE9SVF9MSU5LIHxcbiYjNDM7XHRcdFlUOTIyWF9QT1JUX0NGR19SWF9FTjtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfihZVDkyMlhfUE9SVF9GQ19BTiB8IFlUOTIyWF9QT1JUX0xJTktfQU4pO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1BPUlRuX0NUUkwocG9ydCksIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdC8qIGZvcmNlIG9wICovXG4mIzQzO1x0bWFzayA9IFlUOTIyWF9QT1JUX0ZPUkNFX09QO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCksIG1hc2spO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuIFxuLVx0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKFx1MDAyNnByaXYtXHUwMDNlZHMpO1xuJiM0MztcdC8qIGVuYWJsZSBlbl9waHkgKi9cbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfVkFMVUUsIEJJVChwb3J0KSk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfRU5fUEhZX09WRVJXUklURSwgQklUKHBvcnQpKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiBcbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXHUwMDNlYWNsX2Jsa3MpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgeXQ5MjF4X2FjbF9ibGsgKmFjbGJsayA9IHByaXYtXHUwMDNlYWNsX2Jsa3NbaV07XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiBcbi1cdFx0aWYgKCFhY2xibGspXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGFjbGJsay1cdTAwM2VydWxlcyk7IGomIzQzOyYjNDM7KSB7XG4tXHRcdFx0c3RydWN0IHl0OTIxeF9hY2xfcnVsZSAqYWNscnVsZSA9IGFjbGJsay1cdTAwM2VydWxlc1tqXTtcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7eXQ5MjJ4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHVuc2lnbmVkIGludCBtb2RlLFxuJiM0MztcdFx0XHQgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQsIGludCBkdXBsZXgsXG4mIzQzO1x0XHRcdCAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRwLVx1MDAzZWRzKTtcbiYjNDM7XHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuJiM0MztcdGludCByZXM7XG4gXG4tXHRcdFx0aWYgKCFhY2xydWxlKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0a3ZmcmVlKGFjbHJ1bGUpO1xuLVx0XHR9XG4tXHRcdGt2ZnJlZShhY2xibGspO1xuLVx0fVxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIyeF9wb3J0X3VwKHByaXYsIHBvcnQsIG1vZGUsIGludGVyZmFjZSwgc3BlZWQsIGR1cGxleCxcbiYjNDM7XHRcdFx0ICAgICB0eF9wYXVzZSwgcnhfcGF1c2UpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGRldl9lcnIoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcXG5cJiMzNDssIFwmIzM0O2JyaW5nIHVwXCYjMzQ7LFxuJiM0MztcdFx0XHRwb3J0LCByZXMpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMnhfaW50aWZfZXh0X3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2ICp2YWxwKVxuIHtcbi1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuLVx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcbi1cdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdjtcbi1cdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcbiYjNDM7XHRpbnQgcmVzO1xuIFxuLVx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuLVx0aWYgKCFwcml2KVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRpZiAocG9ydCBcdTAwM2U9IFlUOTIyWF9QT1JUX05VTSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xuLVx0aWYgKCFtZGlvKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfd3JpdGUocHJpdiwgcG9ydCwgWVQ5MlhYX1BBR0VfU0VMRUNULCByZWcpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuIFxuLVx0bWRpby1cdTAwM2VidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbi1cdG1kaW8tXHUwMDNlYWRkciA9IG1kaW9kZXYtXHUwMDNlYWRkcjtcbi1cdG1kaW8tXHUwMDNlc3dpdGNoaWQgPSAwO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9yZWFkKHByaXYsIHBvcnQsIFlUOTJYWF9QQUdFLCB2YWxwKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiBcbi1cdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiBcbi1cdHByaXYtXHUwMDNlcmVnX29wcyA9IFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XG4tXHRwcml2LVx1MDAzZXJlZ19jdHggPSBtZGlvO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9pbnRpZl9leHRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4gXG4tXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMVhfUE9SVF9OVU0pXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbi1cdFx0cHAtXHUwMDNlaW5kZXggPSBpO1xuLVx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcbi1cdH1cbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfd3JpdGUocHJpdiwgcG9ydCwgWVQ5MlhYX1BBR0VfU0VMRUNULCByZWcpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuIFxuLVx0ZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuLVx0ZHMtXHUwMDNlZGV2ID0gZGV2O1xuLVx0ZHMtXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xuLVx0ZHMtXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcbi1cdGRzLVx1MDAzZXByaXYgPSBwcml2O1xuLVx0ZHMtXHUwMDNlb3BzID0gXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzO1xuLVx0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDA7XG4tXHRkcy1cdTAwM2VhZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMDtcbi1cdGRzLVx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFx1MDAyNnl0OTIxeF9waHlsaW5rX21hY19vcHM7XG4tXHRkcy1cdTAwM2VudW1fbGFnX2lkcyA9IFlUOTIxWF9MQUdfTlVNO1xuLVx0ZHMtXHUwMDNlbnVtX3BvcnRzID0gWVQ5MjFYX1BPUlRfTlVNO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBwb3J0LCBZVDkyWFhfUEFHRSwgdmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiBcbi1cdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiBcbi1cdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTtcbiYjNDM7c3RhdGljIGludCB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQoaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGVudW0geXQ5MjJ4X3BoeV9yZWdfdHlwZSByZWdfdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgZW51bSB5dDkyMnhfcGh5X3JlZ19zcGFjZSByZWdfc3BhY2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydCBcdTAwM2U9IDQgXHUwMDI2XHUwMDI2IHBvcnQgXHUwMDNjPSA3KSB7XG4mIzQzO1x0XHRzd2l0Y2ggKHJlZ190eXBlKSB7XG4mIzQzO1x0XHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfQ09NTU9OX0VYVDpcbiYjNDM7XHRcdFx0cmVzID0gOTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfUEhZX0NPTU1PTl9FWFQ6XG4mIzQzO1x0XHRcdGlmIChwb3J0IFx1MDAzYz0gNSBcdTAwMjZcdTAwMjYgcG9ydCBcdTAwM2U9IDQpXG4mIzQzO1x0XHRcdFx0cmVzID0gNDtcbiYjNDM7XHRcdFx0ZWxzZSBpZiAocG9ydCBcdTAwM2M9IDcgXHUwMDI2XHUwMDI2IHBvcnQgXHUwMDNlPSA2KVxuJiM0MztcdFx0XHRcdHJlcyA9IDY7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhUOlxuJiM0MztcdFx0XHRyZXMgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGlmIChyZWdfc3BhY2UgIT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfUEhZKVxuJiM0MztcdFx0XHRcdHJlcyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAocG9ydCA9PSA4KSB7XG4mIzQzO1x0XHRcdHN3aXRjaCAocmVnX3R5cGUpIHtcbiYjNDM7XHRcdFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQ6XG4mIzQzO1x0XHRcdFx0cmVzID0gOTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhUOlxuJiM0MztcdFx0XHRcdHJlcyA9IDg7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9NSUk6XG4mIzQzO1x0XHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9FWFQ6XG4mIzQzO1x0XHRcdFx0aWYgKHJlZ19zcGFjZSA9PSBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSB8fFxuJiM0MztcdFx0XHRcdCAgICByZWdfc3BhY2UgPT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfVVNYR01JSSlcbiYjNDM7XHRcdFx0XHRcdHJlcyA9IDg7XG4mIzQzO1x0XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdFx0cmVzID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0XHRyZXMgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzd2l0Y2ggKHJlZ190eXBlKSB7XG4mIzQzO1x0XHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfQ09NTU9OX0VYVDpcbiYjNDM7XHRcdFx0cmVzID0gOTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQ6XG4mIzQzO1x0XHRcdHJlcyA9IDA7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX01JSTpcbiYjNDM7XHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9FWFQ6XG4mIzQzO1x0XHRcdGlmIChyZWdfc3BhY2UgPT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkgfHxcbiYjNDM7XHRcdFx0ICAgIHJlZ19zcGFjZSA9PSBZVDkyMlhfUEhZX1JFR19TUEFDRV9VU1hHTUlJKVxuJiM0MztcdFx0XHRcdHJlcyA9IDA7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRyZXMgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHJlcyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5MjF4X29mX21hdGNoW10gPSB7XG4tXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0OTIxNVwmIzM0OyB9LFxuJiM0MztzdGF0aWMgaW50IHl0OTIyeF9wb3J0X3Nkc19pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiYjNDM7e1xuJiM0MztcdGludCBhZGRyO1xuJiM0MztcdHUxNiBkYXRhO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQocG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgIFlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQsXG4mIzQzO1x0XHRcdFx0XHQgICBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSk7XG4mIzQzO1x0aWYgKGFkZHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHQvKiB3cml0ZSBwcm90ZWN0ICovXG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRiZSwgMHhkKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHQvKiBDRFIgKi9cbiYjNDM7XHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDBCQVNFWCkge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQwNiwgMHgwKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDE2LCAweDM0NTgpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQwNiwgMHg4MDApO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MTYsIDB4NDU1OCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XHQvKiBQTEwgKi9cbiYjNDM7XHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDNhLCAweDEwMDYpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2YsIDB4MzAyOSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQyYSwgMHhmMDcwKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2QsIDB4MjA3ZCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzYywgMHgyMDdkKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDNmLCAweDMwMzIpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2EsIDB4Nik7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQyYSwgMHhmMDcwKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcdC8qIFZDTyAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MzksIDB4QzApO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdC8qIFZkYWMgKi9cbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDkyLCAweDdmN2YpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTEsIDB4N2YpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdC8qIEV5ZSAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0NTQsIDB4ZjE0KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDk3LCAweGE0NCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRjZCwgMHgwKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRhZiwgMHg0NWUzKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDhhLCAweGZmZik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQwOCwgMHg3YzAwKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NGQ2LCAweDdmKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDRmLCAweGZmMDgpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdC8qIEZGRSAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OGUsIDB4N2QwMCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweGQsIDB4NjBmKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHQvKiBDVExFICovXG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRiMCwgMHg4MDQpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0YjEsIDB4Nzc3NCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRhZiwgMHg0NWU3KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4MywgMHg1NjAzKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0bXNsZWVwKDIwKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDkyLCAweDdmZmYpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTIsIDB4N2Y3Zik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0LyogQ1RMRSAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHgyMDAwLCAweDQwKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4MjAwMCwgMHgwKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHgxMDQyLCAweDQ4Yyk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzOyAgICAvKiBzb2Z0IHJlc2V0ICovXG4mIzQzO1x0YWRkciA9IHl0OTIyeF9pbnRlcm5hbF9waHlhZGRyX2dldChwb3J0LCBZVDkyMlhfUEhZX1JFR19UWVBFX01JSSxcbiYjNDM7XHRcdFx0XHRcdCAgIFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJKTtcbiYjNDM7XHRpZiAoYWRkciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX3JlYWQocHJpdiwgYWRkciwgMHgyMDAwLCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRkYXRhIFx1MDAyNj0gfigxIFx1MDAzY1x1MDAzYyAxNSk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIGFkZHIsIDB4MjAwMCwgZGF0YSk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0YWRkciA9IHl0OTIyeF9pbnRlcm5hbF9waHlhZGRyX2dldChwb3J0LCBZVDkyMlhfUEhZX1JFR19UWVBFX01JSSxcbiYjNDM7XHRcdFx0XHRcdCAgIFlUOTIyWF9QSFlfUkVHX1NQQUNFX1VTWEdNSUkpO1xuJiM0MztcdGlmIChhZGRyIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfcmVhZChwcml2LCBhZGRyLCAweDAsIFx1MDAyNmRhdGEpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdGRhdGEgfD0gMSBcdTAwM2NcdTAwM2MgMTU7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIGFkZHIsIDB4MCwgZGF0YSk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIyeF9wb3J0X2NvbmZpZyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgbW9kZSxcbiYjNDM7XHRcdCAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgYWRkcjtcbiYjNDM7XHR1MTYgZGF0YTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRhZGRyID0geXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0KHBvcnQsXG4mIzQzO1x0XHRcdFx0XHQgICBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhULFxuJiM0MztcdFx0XHRcdFx0ICAgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkpO1xuJiM0MztcdGlmIChhZGRyIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0c3dpdGNoIChpbnRlcmZhY2UpIHtcbiYjNDM7XHQvKiBTRVJERVMgKi9cbiYjNDM7XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcbiYjNDM7XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDBCQVNFWDpcbiYjNDM7XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XG4mIzQzO1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYOlxuJiM0MztcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XG4mIzQzO1x0XHRyZXMgPSB5dDkyMnhfcG9ydF9zZHNfaW5pdChwcml2LCBwb3J0LCBpbnRlcmZhY2UpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0XHRhZGRyID0geXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0XG4mIzQzO1x0XHRcdChwb3J0LCBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhULFxuJiM0MztcdFx0XHQgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkpO1xuJiM0MztcdFx0aWYgKGFkZHIgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdHJlcyA9IHl0OTIyeF9pbnRpZl9leHRfcmVhZChwcml2LCBhZGRyLCBZVDkyMlhfUE9SVF9TRFNfTU9ERSxcbiYjNDM7XHRcdFx0XHRcdCAgICBcdTAwMjZkYXRhKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdFx0ZGF0YSBcdTAwMjY9ICh+MHg3IFx1MDAzY1x1MDAzYyA0KTtcbiYjNDM7XHRcdHN3aXRjaCAoaW50ZXJmYWNlKSB7XG4mIzQzO1x0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcbiYjNDM7XHRcdFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXG4mIzQzO1x0XHRcdFx0XHQgICBZVDkyWFhfU0VSREVTX01PREVfU0dNSUkpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMEJBU0VYOlxuJiM0MztcdFx0XHRkYXRhIHw9IEZJRUxEX1BSRVAoWVQ5MjJYX1BPUlRfU0RTX01PREVfTSxcbiYjNDM7XHRcdFx0XHRcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV8xMDBCQVNFWCk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYOlxuJiM0MztcdFx0XHRkYXRhIHw9IEZJRUxEX1BSRVAoWVQ5MjJYX1BPUlRfU0RTX01PREVfTSxcbiYjNDM7XHRcdFx0XHRcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV8xMDAwQkFTRVgpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDpcbiYjNDM7XHRcdFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXG4mIzQzO1x0XHRcdFx0XHQgICBZVDkyWFhfU0VSREVTX01PREVfMjUwMEJBU0VYKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJOlxuJiM0MztcdFx0XHRkYXRhIHw9IEZJRUxEX1BSRVAoWVQ5MjJYX1BPUlRfU0RTX01PREVfTSxcbiYjNDM7XHRcdFx0XHRcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV9VU1hHTUlJKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgWVQ5MjJYX1BPUlRfU0RTX01PREUsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGRhdGEpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0Mzt5dDkyMnhfcGh5bGlua19tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcbiYjNDM7XHRcdFx0ICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHAtXHUwMDNlZHMpO1xuJiM0MztcdGludCBwb3J0ID0gZHAtXHUwMDNlaW5kZXg7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMnhfcG9ydF9jb25maWcocHJpdiwgcG9ydCwgbW9kZSwgc3RhdGUtXHUwMDNlaW50ZXJmYWNlKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRkZXZfZXJyKGRwLVx1MDAzZWRzLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvICVzIHBvcnQgJWQ6ICVpXFxuXCYjMzQ7LCBcJiMzNDtjb25maWdcJiMzNDssXG4mIzQzO1x0XHRcdHBvcnQsIHJlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHl0OTIyeF9waHlsaW5rX21hY19vcHMgPSB7XG4mIzQzO1x0Lm1hY19saW5rX2Rvd25cdD0geXQ5MjJ4X3BoeWxpbmtfbWFjX2xpbmtfZG93bixcbiYjNDM7XHQubWFjX2xpbmtfdXBcdD0geXQ5MjJ4X3BoeWxpbmtfbWFjX2xpbmtfdXAsXG4mIzQzO1x0Lm1hY19jb25maWdcdD0geXQ5MjJ4X3BoeWxpbmtfbWFjX2NvbmZpZyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcbiYjNDM7eXQ5MjJ4X2RzYV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBEU0FfVEFHX1BST1RPX1lUOTIyWDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7eXQ5MjJ4X2RzYV9waHlsaW5rX2dldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm8gPSBwcml2LVx1MDAzZWluZm87XG4mIzQzO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzID0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFIHxcbiYjNDM7XHRcdFx0XHQgICBNQUNfMTAgfCBNQUNfMTAwIHwgTUFDXzEwMDA7XG4mIzQzO1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZWludGVybmFsX21hc2sgXHUwMDI2IEJJVChwb3J0KSkge1xuJiM0MztcdFx0aWYgKHBvcnQgXHUwMDNlPSA0IFx1MDAyNlx1MDAyNiBwb3J0IFx1MDAzYz0gNykge1xuJiM0MztcdFx0XHQvKiBwb3J0IDQgdG8gcG9ydCA3LCBpbnRlcm5hbCB1dHAgKi9cbiYjNDM7XHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCxcbiYjNDM7XHRcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1x0XHRcdGNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18yNTAwRkQ7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLFxuJiM0MztcdFx0XHRcdCAgY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDBCQVNFWCxcbiYjNDM7XHRcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1x0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLFxuJiM0MztcdFx0XHRcdCAgY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgsXG4mIzQzO1x0XHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0XHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMEZEO1xuJiM0MztcdFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUksXG4mIzQzO1x0XHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0XHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMEZEO1xuJiM0MztcdFx0XHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfNTAwMEZEO1xuJiM0MztcdFx0XHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMDBGRDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogZXh0ZXJuYWwgcG9ydCB3aWxsIGFkZGVkIGxhdGVyICovXG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0OTIyeF9wb3J0X3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdC8qIGVuYWJsZSB1c2VyIHBvcnQgaXNvbGF0aW9uIGFuZCBkaXNhYmxlIGZkYiBsZWFybmluZyAqL1xuJiM0MztcdGN0cmwgPSB+cHJpdi1cdTAwM2VjcHVfcG9ydHNfbWFzaztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9QT1JUbl9JU09MQVRJT04ocG9ydCksIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjJYX1BPUlRfTEVBUk5fRElTO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjJYX1BPUlRuX0xFQVJOKHBvcnQpLCBtYXNrKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpIHtcbiYjNDM7XHRcdGN0cmwgPSB+KHUzMikwO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfUE9SVG5fSVNPTEFUSU9OKHBvcnQpLFxuJiM0MztcdFx0XHRcdCAgICAgICBjdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0OTIyeF9kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjJ4X3BvcnRfc2V0dXAocHJpdiwgcG9ydCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0OTIyeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvICppbmZvO1xuJiM0MztcdHUzMiBjaGlwaWQ7XG4mIzQzO1x0dTMyIG1ham9yO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ0hJUF9JRCwgXHUwMDI2Y2hpcGlkKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRtYWpvciA9IEZJRUxEX0dFVChZVDkyMVhfQ0hJUF9JRF9NQUpPUiwgY2hpcGlkKTtcbiYjNDM7XHRmb3IgKGluZm8gPSB5dDkyMXhfaW5mb3M7IGluZm8tXHUwMDNlbmFtZTsgaW5mbyYjNDM7JiM0MzspXG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VtYWpvciA9PSBtYWpvcilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0aWYgKCFpbmZvLVx1MDAzZW5hbWUpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtVbmV4cGVjdGVkIGNoaXBpZCAweCV4XFxuXCYjMzQ7LCBjaGlwaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcdHByaXYtXHUwMDNlaW5mbyA9IGluZm87XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0OTIyeF9jaGlwX3Jlc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjJ4X2NoaXBfZGV0ZWN0KHByaXYpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHQvKiBSZXNldCAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1JTVCwgWVQ5MjFYX1JTVF9IVyk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGZzbGVlcChZVDkyMVhfUlNUX0RFTEFZX1VTKTtcbiYjNDM7XG4mIzQzO1x0dmFsID0gMDtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dhaXQocHJpdiwgWVQ5MjFYX1JTVCwgfjAsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0OTIyeF9jaGlwX3NldHVwX2RzYShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNwdV9wb3J0c19tYXNrO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdGludCBwb3J0O1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGN0cmwgPSBHRU5NQVNLKDksIDApO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0ZJTFRFUl9VTktfVUNBU1QsIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gMDtcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2VjaGlwX2luZm8tXHUwMDNlcG9ydHM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0Y3RybCB8PSBZVDkyMlhfQUNUX1VOS19BQ1RuX1RSQVAoaSk7XG4mIzQzO1x0Y3B1X3BvcnRzX21hc2sgPSBwcml2LVx1MDAzZWNwdV9wb3J0c19tYXNrO1xuJiM0MztcdGZvcl9lYWNoX3NldF9iaXQocG9ydCwgXHUwMDI2Y3B1X3BvcnRzX21hc2ssIHByaXYtXHUwMDNlY2hpcF9pbmZvLVx1MDAzZXBvcnRzKSB7XG4mIzQzO1x0XHRjdHJsIFx1MDAyNj0gfllUOTIyWF9BQ1RfVU5LX0FDVG5fTShwb3J0KTtcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjJYX0FDVF9VTktfQUNUbl9EUk9QKHBvcnQpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9BQ1RfVU5LX1VDQVNULCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9BQ1RfVU5LX01DQVNULCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IFlUOTIyWF9GVU5DX01JQiB8IFlUOTIyWF9GVU5DX0FDTDtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIxWF9GVU5DLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjJ4X2NoaXBfc2V0dXBfZHNhKHByaXYpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dDkyMnhfY3B1X3RhZ19tb2RlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1x0dTE2IGV0aF9wX3RhZztcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdHUzMiB2YWwxO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdC8qIGNwdSB0YWcgbW9kZSBzZXQgKi9cbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjJYX0NQVV9UQUdfUlhfQ1RSTCwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjJYX0NQVV9UQUdfVFhfQ1RSTCwgXHUwMDI2dmFsMSk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0dmFsIFx1MDAyNj0gfllUOTIyWF9DUFVfVEFHX1JYX01PREU7XG4mIzQzO1x0dmFsMSBcdTAwMjY9IH5ZVDkyMlhfQ1BVX1RBR19UWF9NT0RFO1xuJiM0MztcdHZhbDEgXHUwMDI2PSB+WVQ5MjJYX0NQVV9UQUdfVFhfVFlQRTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9DUFVfVEFHX1JYX0NUUkwsIHZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQ1BVX1RBR19UWF9DVFJMLCB2YWwxKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0LyogdHBpZCBjaGVjayAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ1BVX1RBR19UUElELCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdGV0aF9wX3RhZyA9IEZJRUxEX0dFVChZVDkyMVhfQ1BVX1RBR19UUElEX1RQSURfTSwgdmFsKTtcbiYjNDM7XHRpZiAoZXRoX3BfdGFnICE9IEVUSF9QX1lUOTIxWCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1RhZyB0eXBlIDB4JXggIT0gMHgleFxcblwmIzM0OywgZXRoX3BfdGFnLFxuJiM0MztcdFx0XHRFVEhfUF9ZVDkyMVgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dDkyMnhfY3B1X3BvcnRfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0LyogY3B1IHRhZyBtb2RlICovXG4mIzQzO1x0cmVzID0geXQ5MjJ4X2NwdV90YWdfbW9kZV9zZXQocHJpdik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBEU0EgKi9cbiYjNDM7XHRwcml2LVx1MDAzZWNwdV9wb3J0c19tYXNrID0gZHNhX2NwdV9wb3J0cyhkcyk7XG4mIzQzO1x0Y3RybCA9IFlUOTIxWF9FWFRfQ1BVX1BPUlRfVEFHX0VOIHwgWVQ5MjFYX0VYVF9DUFVfUE9SVF9QT1JUX0VOIHxcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0VYVF9DUFVfUE9SVF9QT1JUKF9fZmZzKHByaXYtXHUwMDNlY3B1X3BvcnRzX21hc2spKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9FWFRfQ1BVX1BPUlQsIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHQvKiBTZXR1cCBzb2Z0d2FyZSBzd2l0Y2ggKi9cbiYjNDM7XHRjdHJsID0gWVQ5MjJYX0NQVV9DT1BZX1RPX0VYVF9DUFU7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQ1BVX0NPUFksIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0OTIyeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZW9mX25vZGU7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIyeF9jaGlwX3Jlc2V0KHByaXYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0LyogUmVnaXN0ZXIgdGhlIGludGVybmFsIG1kaW8gYnVzLiAqL1xuJiM0MztcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFwmIzM0O21kaW9cJiMzNDspO1xuJiM0MztcdGlmIChjaGlsZCkge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X21idXNfaW50X2luaXQocHJpdiwgY2hpbGQpO1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCAvKiBjcHUgcG9ydCBzZXQgKi9cbiYjNDM7XHQgbXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHQgcmVzID0geXQ5MjJ4X2NwdV9wb3J0X3NldChwcml2KTtcbiYjNDM7XHQgbXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIyeF9jaGlwX3NldHVwKHByaXYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgeXQ5MjJ4X2RzYV9zd2l0Y2hfb3BzID0ge1xuJiM0MztcdC8qIHBvcnQgKi9cbiYjNDM7XHQuZ2V0X3RhZ19wcm90b2NvbFx0PSB5dDkyMnhfZHNhX2dldF90YWdfcHJvdG9jb2wsXG4mIzQzO1x0LnBoeWxpbmtfZ2V0X2NhcHNcdD0geXQ5MjJ4X2RzYV9waHlsaW5rX2dldF9jYXBzLFxuJiM0MztcdC5wb3J0X3NldHVwXHRcdD0geXQ5MjJ4X2RzYV9wb3J0X3NldHVwLFxuJiM0MztcdC8qIGNoaXAgKi9cbiYjNDM7XHQuc2V0dXBcdFx0XHQ9IHl0OTIyeF9kc2Ffc2V0dXAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTJ4eF9jaGlwX2luZm8geXQ5Mnh4X2NoaXBfaW5mb190YWJsZVtdID0ge1xuJiM0MztcdFtZVDkyMTVdID0ge1xuJiM0MztcdFx0Lm1vZGUgPSBZVDkyMTUsXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O21vdG9yY29tbSB5dDkyMTVcJiMzNDssXG4mIzQzO1x0XHQucG9ydHMgPSBZVDkyMVhfUE9SVF9OVU0sXG4mIzQzO1x0XHQubGFnX2lkID0gWVQ5MjFYX0xBR19OVU0sXG4mIzQzO1x0XHQuYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDAsXG4mIzQzO1x0XHQuYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDUwMDAsXG4mIzQzO1x0XHQuc3dpdGNoX29wcyA9IFx1MDAyNnl0OTIxeF9kc2Ffc3dpdGNoX29wcyxcbiYjNDM7XHRcdC5tYWNfb3BzID0gXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcyxcbiYjNDM7XHR9LFxuJiM0MztcdFtZVDkyMjRdID0ge1xuJiM0MztcdFx0Lm1vZGUgPSBZVDkyMjQsXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O21vdG9yY29tbSB5dDkyMjRcJiMzNDssXG4mIzQzO1x0XHQucG9ydHMgPSBZVDkyMlhfUE9SVF9OVU0sXG4mIzQzO1x0XHQubGFnX2lkID0gWVQ5MjJYX0xBR19OVU0sXG4mIzQzO1x0XHQuYWdlaW5nX3RpbWVfbWluID0gMSAqIDYwMDAsXG4mIzQzO1x0XHQuYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDYwMDAsXG4mIzQzO1x0XHQuc3dpdGNoX29wcyA9IFx1MDAyNnl0OTIyeF9kc2Ffc3dpdGNoX29wcyxcbiYjNDM7XHRcdC5tYWNfb3BzID0gXHUwMDI2eXQ5MjJ4X3BoeWxpbmtfbWFjX29wcyxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgeXQ5Mnh4X21kaW9fc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRkc2Ffc3dpdGNoX3NodXRkb3duKFx1MDAyNnByaXYtXHUwMDNlZHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB5dDkyeHhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbiYjNDM7XHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHAtXHUwMDNlbWliX3JlYWQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKFx1MDAyNnByaXYtXHUwMDNlZHMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZWFjbF9ibGtzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCB5dDkyMXhfYWNsX2JsayAqYWNsYmxrID0gcHJpdi1cdTAwM2VhY2xfYmxrc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWFjbGJsaylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShhY2xibGstXHUwMDNlcnVsZXMpOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRzdHJ1Y3QgeXQ5MjF4X2FjbF9ydWxlICphY2xydWxlID0gYWNsYmxrLVx1MDAzZXJ1bGVzW2pdO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFhY2xydWxlKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRrdmZyZWUoYWNscnVsZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRrdmZyZWUoYWNsYmxrKTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dDkyeHhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgeXQ5Mnh4X2NoaXBfaW5mbyAqY29tcGF0X2luZm8gPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2O1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcbiYjNDM7XG4mIzQzO1x0Y29tcGF0X2luZm8gPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcbiYjNDM7XHRpZiAoIWNvbXBhdF9pbmZvKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghbWRpbylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRtZGlvLVx1MDAzZWJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuJiM0MztcdG1kaW8tXHUwMDNlYWRkciA9IG1kaW9kZXYtXHUwMDNlYWRkcjtcbiYjNDM7XHRtZGlvLVx1MDAzZXN3aXRjaGlkID0gMDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VjaGlwX2luZm8gPSBjb21wYXRfaW5mbztcbiYjNDM7XHRwcml2LVx1MDAzZXJlZ19vcHMgPSBcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xuJiM0MztcdHByaXYtXHUwMDNlcmVnX2N0eCA9IG1kaW87XG4mIzQzO1xuJiM0MztcdGRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiYjNDM7XHRkcy1cdTAwM2VkZXYgPSBkZXY7XG4mIzQzO1x0ZHMtXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xuJiM0MztcdGRzLVx1MDAzZWRzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7XG4mIzQzO1x0ZHMtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1x0ZHMtXHUwMDNlb3BzID0gY29tcGF0X2luZm8tXHUwMDNlc3dpdGNoX29wcztcbiYjNDM7XHRkcy1cdTAwM2VhZ2VpbmdfdGltZV9taW4gPSBjb21wYXRfaW5mby1cdTAwM2VhZ2VpbmdfdGltZV9taW47XG4mIzQzO1x0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gY29tcGF0X2luZm8tXHUwMDNlYWdlaW5nX3RpbWVfbWF4O1xuJiM0MztcdGRzLVx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IGNvbXBhdF9pbmZvLVx1MDAzZW1hY19vcHM7XG4mIzQzO1x0ZHMtXHUwMDNlbnVtX2xhZ19pZHMgPSBjb21wYXRfaW5mby1cdTAwM2VsYWdfaWQ7XG4mIzQzO1x0ZHMtXHUwMDNlbnVtX3BvcnRzID0gY29tcGF0X2luZm8tXHUwMDNlcG9ydHM7XG4mIzQzO1xuJiM0MztcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5Mnh4X29mX21hdGNoW10gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0LmNvbXBhdGlibGUgPSBcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7LFxuJiM0MztcdFx0LmRhdGEgPSBcdTAwMjZ5dDkyeHhfY2hpcF9pbmZvX3RhYmxlW1lUOTIxNV0sXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuY29tcGF0aWJsZSA9IFwmIzM0O21vdG9yY29tbSx5dDkyMjRcJiMzNDssXG4mIzQzO1x0XHQuZGF0YSA9IFx1MDAyNnl0OTJ4eF9jaGlwX2luZm9fdGFibGVbWVQ5MjI0XSxcbiYjNDM7XHR9LFxuIFx0e31cbiB9O1xuLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTIxeF9vZl9tYXRjaCk7XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTJ4eF9vZl9tYXRjaCk7XG4gXG4tc3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7XG4tXHQucHJvYmUgPSB5dDkyMXhfbWRpb19wcm9iZSxcbi1cdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXG4tXHQuc2h1dGRvd24gPSB5dDkyMXhfbWRpb19zaHV0ZG93bixcbiYjNDM7c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyeHhfbWRpb19kcml2ZXIgPSB7XG4mIzQzO1x0LnByb2JlID0geXQ5Mnh4X21kaW9fcHJvYmUsXG4mIzQzO1x0LnJlbW92ZSA9IHl0OTJ4eF9tZGlvX3JlbW92ZSxcbiYjNDM7XHQuc2h1dGRvd24gPSB5dDkyeHhfbWRpb19zaHV0ZG93bixcbiBcdC5tZGlvZHJ2LmRyaXZlciA9IHtcbi1cdFx0Lm5hbWUgPSBZVDkyMVhfTkFNRSxcbi1cdFx0Lm9mX21hdGNoX3RhYmxlID0geXQ5MjF4X29mX21hdGNoLFxuJiM0MztcdFx0Lm5hbWUgPSBZVDkyWFhfTkFNRSxcbiYjNDM7XHRcdC5vZl9tYXRjaF90YWJsZSA9IHl0OTJ4eF9vZl9tYXRjaCxcbiBcdH0sXG4gfTtcbiBcbi1tZGlvX21vZHVsZV9kcml2ZXIoeXQ5MjF4X21kaW9fZHJpdmVyKTtcbiYjNDM7bWRpb19tb2R1bGVfZHJpdmVyKHl0OTJ4eF9tZGlvX2RyaXZlcik7XG4gXG4gTU9EVUxFX0FVVEhPUihcJiMzNDtEYXZpZCBZYW5nIFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4tTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0RyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBTd2l0Y2hcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0t5bGUgU3dpdGNoIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0RyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBhbmQgWVQ5MjJ4IFN3aXRjaFwmIzM0Oyk7XG4gTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbmluZGV4IDVmM2I5OWUxODljNDEuLjAzMDhlNmI5MTYxOGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxuQEAgLTgzNyw2ICYjNDM7ODM3LDcgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gXG4gI2RlZmluZSBZVDkyMTVfTUFKT1JcdDB4OTAwMlxuICNkZWZpbmUgWVQ5MjE4X01BSk9SXHQweDkwMDFcbiYjNDM7I2RlZmluZSBZVDkyMjRfTUFKT1JcdDB4OTAwNFxuIFxuIC8qIHJlcXVpcmVkIGZvciBhIGhhcmQgcmVzZXQgKi9cbiAjZGVmaW5lIFlUOTIxWF9SU1RfREVMQVlfVVNcdDEwMDAwXG5AQCAtODUzLDYgJiM0Mzs4NTQsOTYgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gLyogOCBpbnRlcm5hbCAmIzQzOyAyIGV4dGVybmFsICYjNDM7IDEgbWN1ICovXG4gI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cdFx0XHQxMVxuIFxuJiM0MzsvKiB5dDkyMnggcmVnaXN0ZXIgbGlzdHMgKi9cbiYjNDM7I2RlZmluZSBZVDkyWFhfUEFHRV9TRUxFQ1RcdDB4MWVcbiYjNDM7I2RlZmluZSBZVDkyWFhfUEFHRVx0XHQweDFmXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCkgICAgICAgICAgICAgICAgKDB4ODAwODAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9DVFJMX1BBVVNFX0FOICAgICAgQklUKDEwKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUbl9TVEFUVVMocG9ydCkgICAgICAoMHg4MDIwMCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9FTl9QSFlfT1ZFUldSSVRFICAgKDB4ODAwNDApXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0VOX1BIWV9WQUxVRSAgICAgICAoMHg4MDAzYylcbiYjNDM7LyogQ1RSTDogZm9yY2Ugb3AgdG8gbWFrZSBzb2Z0IGNvbmZpZ3VyYXRpb24gZWZmZWN0aXZlICovXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfRk9SQ0VfT1AgICAgICAgICAgIEJJVCgxNClcbiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9DRkdfVFhfRU4gICAgICAgQklUKDEzKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX0NGR19SWF9FTiAgICAgICBCSVQoMTIpXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfRkNfQU4gICAgICAgICAgICBCSVQoMTEpXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfTElOS19BTiAgICAgICAgICAgIEJJVCgxMCkgIC8qIENUUkw6IGF1dG8gbmVnb3RpYXRpb24gKi9cbiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9MSU5LICAgICAgICAgICAgICAgQklUKDkpICAvKiBDVFJMOiBsaW5rIHN0YXR1cyAqL1xuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX0hBTEZfUEFVU0UgICAgICAgICBCSVQoOCkgIC8qIEhhbGYtZHVwbGV4IGJhY2sgcHJlc3N1cmUgbW9kZSAqL1xuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX0RVUExFWF9GVUxMICAgICAgICAgICAgICAgIEJJVCg3KVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX1JYX1BBVVNFICAgICAgICAgICBCSVQoNilcbiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9UWF9QQVVTRSAgICAgICAgICAgQklUKDUpXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfUlhfTUFDX0VOICAgICAgICAgIEJJVCg0KVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX1RYX01BQ19FTiAgICAgICAgICBCSVQoMylcbiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9TUEVFRF9NICAgICAgICAgICAgR0VOTUFTSygyLCAwKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX1NEU19NT0RFICAgICAgICAgICAweDQwMFxuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX1NEU19NT0RFX00gICAgICAgICBHRU5NQVNLKDYsIDQpXG4mIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFX1NHTUlJICAgICAgICAgICAgICAgICAgICAgICAwXG4mIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFX1JFVlNHTUlJICAgICAgICAgICAgICAgICAgICAxXG4mIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFXzEwMDBCQVNFWCAgICAgICAgICAgICAgICAgICAyXG4mIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFXzEwMEJBU0VYICAgICAgICAgICAgICAgICAgICAzXG4mIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFXzI1MDBCQVNFWCAgICAgICAgICAgICAgICAgICA0XG4mIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFX1VTWEdNSUkgICAgICAgICAgICAgICAgICAgICA2XG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDlcbiYjNDM7LyogTEFHICovXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0xBR19OVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0XG4mIzQzOy8qIElTTyAqL1xuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUbl9JU09MQVRJT04ocG9ydCkgICAgICAgICAgICgweDQgKiAocG9ydCkgJiM0MzsgMHgxODBkODApXG4mIzQzOy8qIEZEQiAqL1xuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUbl9MRUFSTihwb3J0KSAgICAgICAoMHgxODAzMDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9MRUFSTl9ESVMgICAgICAgICAgQklUKDE4KVxuJiM0MzsvKiBHTE9CQUwgQ1RSTCAqL1xuJiM0MzsjZGVmaW5lICBZVDkyMlhfRlVOQ19BQ0wgICAgICAgICAgICAgICBCSVQoNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjJYX0ZVTkNfTUlCICAgICAgICAgICAgICAgQklUKDQpXG4mIzQzOy8qIENUUkwgUEtUICovXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0ZJTFRFUl9VTktfVUNBU1QgICAgICAgICAgICAgICAgICAgICAgICAweDE4MGVjOFxuJiM0MzsjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX1VDQVNUICAgICAgICAgICAgICAgICAgIDB4MTgwZWQ4XG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfTUNBU1QgICAgICAgICAgICAgICAgICAgMHgxODBlZTBcbiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19NQ0FTVF9CWVBBU1NfRFJPUF9QSU0gICBCSVQoMjIpXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfTUNBU1RfQllQQVNTX0RST1BfTUxEICAgQklUKDIxKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX01DQVNUX0JZUEFTU19EUk9QX0lHTVAgIEJJVCgyMClcbiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX00ocG9ydCkgICAgICAgICAgICBHRU5NQVNLKDIgKiAocG9ydCkgJiM0MzsgMSwgMiAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuKHBvcnQsIHgpICAgICAgICAgICAoKHgpIFx1MDAzY1x1MDAzYyAoMiAqIChwb3J0KSkpXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfQUNUbl9GT1JXQVJEKHBvcnQpICAgICAgWVQ5MjJYX0FDVF9VTktfQUNUbihwb3J0LCAwKSAgLyogZmxvb2QgKi9cbiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX1RSQVAocG9ydCkgICAgICAgICBZVDkyMlhfQUNUX1VOS19BQ1RuKHBvcnQsIDMpICAvKiBzdGVlciB0byBDUFUgKi9cbiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX0RST1AocG9ydCkgICAgICAgICBZVDkyMlhfQUNUX1VOS19BQ1RuKHBvcnQsIDEpICAvKiBkaXNjYXJkICovXG4mIzQzOy8qIE5FVkVSIHVzZSB0aGlzIGFjdGlvbjsgc2VlIGNvbW1lbnRzIGluIHRoZSB0YWcgZHJpdmVyICovXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfQUNUbl9DT1BZKHBvcnQpICAgICAgICAgWVQ5MjJYX0FDVF9VTktfQUNUbihwb3J0LCAyKSAgLyogZmxvb2QgYW5kIGNvcHkgKi9cbiYjNDM7XG4mIzQzOy8qIENQVSBQT1JUICovXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9DT1BZXHRcdFx0MHgxODExMDBcbiYjNDM7I2RlZmluZSBZVDkyMlhfQ1BVX0NPUFlfVE9fSU5UX0NQVVx0QklUKDEpXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9DT1BZX1RPX0VYVF9DUFVcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1JYX0NUUkxcdFx0MHg4MDUwNFxuJiM0MzsjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1JYX01PREVcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfQ1RSTFx0XHQweDEwMDcxMFxuJiM0MzsjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1RYX1RZUEVcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfTU9ERVx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSBZVDkyMlhfQ1BVX1RBR19UWF9DVEFHX09QXHRCSVQoMilcbiYjNDM7I2RlZmluZSBZVDkyMlhfQ1BVX1RBR19UWF9TVEFHX09QXHRCSVQoMylcbiYjNDM7XG4mIzQzO2VudW0geXQ5MjJ4X3BoeV9yZWdfdHlwZSB7XG4mIzQzO1x0WVQ5MjJYX1BIWV9SRUdfVFlQRV9DT01NT05fRVhULFxuJiM0MztcdFlUOTIyWF9QSFlfUkVHX1RZUEVfUEhZX0NPTU1PTl9FWFQsXG4mIzQzO1x0WVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVCxcbiYjNDM7XHRZVDkyMlhfUEhZX1JFR19UWVBFX01JSSxcbiYjNDM7XHRZVDkyMlhfUEhZX1JFR19UWVBFX0VYVCxcbiYjNDM7XHRZVDkyMlhfUEhZX1JFR19UWVBFX01NRDEsXG4mIzQzO1x0WVQ5MjJYX1BIWV9SRUdfVFlQRV9NTUQzLFxuJiM0MztcdFlUOTIyWF9QSFlfUkVHX1RZUEVfTU1ENyxcbiYjNDM7XHRZVDkyMlhfUEhZX1JFR19UWVBFX01BWFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7ZW51bSB5dDkyMnhfcGh5X3JlZ19zcGFjZSB7XG4mIzQzO1x0WVQ5MjJYX1BIWV9SRUdfU1BBQ0VfUEhZLFxuJiM0MztcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1BIWV9UMSxcbiYjNDM7XHRZVDkyMlhfUEhZX1JFR19TUEFDRV9QSFlfTERTLFxuJiM0MztcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJLFxuJiM0MztcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1VTWEdNSUksXG4mIzQzO1x0WVQ5MjJYX1BIWV9SRUdfU1BBQ0VfUVNHTUlJLFxuJiM0MztcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX01BWFxuJiM0Mzt9O1xuJiM0MztcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXHUwMDNjIDgpXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoKHBvcnQpID09IDggfHwgKHBvcnQpID09IDkpXG4gXG5AQCAtOTQ1LDkgJiM0MzsxMDM2LDI2IEBAIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG4gXHRpbnQgKCp3cml0ZSkodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyIHZhbCk7XG4gfTtcbiBcbiYjNDM7ZW51bSB5dDkyeHhfbW9kZSB7XG4mIzQzO1x0WVQ5MjE1LFxuJiM0MztcdFlUOTIyNCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyeHhfY2hpcF9pbmZvIHtcbiYjNDM7XHRlbnVtIHl0OTJ4eF9tb2RlIG1vZGU7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcG9ydHM7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxhZ19pZDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYWdlaW5nX3RpbWVfbWluO1xuJiM0MztcdHVuc2lnbmVkIGludCBhZ2VpbmdfdGltZV9tYXg7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzICpzd2l0Y2hfb3BzO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgKm1hY19vcHM7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCB5dDkyMXhfcHJpdiB7XG4gXHRzdHJ1Y3QgZHNhX3N3aXRjaCBkcztcbiBcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgeXQ5Mnh4X2NoaXBfaW5mbyAqY2hpcF9pbmZvO1xuIFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvICppbmZvO1xuIFx0dW5zaWduZWQgaW50IG1ldGVyX3Nsb3RfbnM7XG4gXHR1bnNpZ25lZCBpbnQgcG9ydF9zaGFwZV9zbG90X25zO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmhcbmluZGV4IDZmN2Y1YzE3YjUzMjAuLjBjMDMzY2E2NWI5MjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZHNhLmhcbkBAIC02MCw2ICYjNDM7NjAsNyBAQCBzdHJ1Y3QgdGNfYWN0aW9uO1xuICNkZWZpbmUgRFNBX1RBR19QUk9UT19NWEw4NjJfVkFMVUVcdFx0MzJcbiAjZGVmaW5lIERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRVx0XHQzM1xuICNkZWZpbmUgRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFXHRcdDM0XG4mIzQzOyNkZWZpbmUgRFNBX1RBR19QUk9UT19ZVDkyMlhfVkFMVUUgICAgICAgICAgICAgIDM1XG4gXG4gZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcbiBcdERTQV9UQUdfUFJPVE9fTk9ORVx0XHQ9IERTQV9UQUdfUFJPVE9fTk9ORV9WQUxVRSxcbkBAIC05Nyw2ICYjNDM7OTgsNyBAQCBlbnVtIGRzYV90YWdfcHJvdG9jb2wge1xuIFx0RFNBX1RBR19QUk9UT19NWEw4NjJcdFx0PSBEU0FfVEFHX1BST1RPX01YTDg2Ml9WQUxVRSxcbiBcdERTQV9UQUdfUFJPVE9fTkVUQ1x0XHQ9IERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRSxcbiBcdERTQV9UQUdfUFJPVE9fS1NaODQ2M1x0XHQ9IERTQV9UQUdfUFJPVE9fS1NaODQ2M19WQUxVRSxcbiYjNDM7XHREU0FfVEFHX1BST1RPX1lUOTIyWFx0XHQ9IERTQV9UQUdfUFJPVE9fWVQ5MjJYX1ZBTFVFLFxuIH07XG4gXG4gc3RydWN0IGRzYV9zd2l0Y2g7XG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS9LY29uZmlnIGIvbmV0L2RzYS9LY29uZmlnXG5pbmRleCBkNWU3MjViOTBkNzg1Li5lNGZkM2E5YTY2MjExIDEwMDY0NFxuLS0tIGEvbmV0L2RzYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL0tjb25maWdcbkBAIC0yMTUsMTAgJiM0MzsyMTUsMTAgQEAgY29uZmlnIE5FVF9EU0FfVEFHX1hSUzcwMFhcbiBcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yXG4gXHQgIEFycm93IFNwZWVkQ2hpcHMgWFJTNzAweCBzd2l0Y2hlcyB0aGF0IHVzZSBhIHNpbmdsZSBieXRlIHRhZyB0cmFpbGVyLlxuIFxuLWNvbmZpZyBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE1vdG9yY29tbSBZVDkyMXggc3dpdGNoZXNcJiMzNDtcbiYjNDM7Y29uZmlnIE5FVF9EU0FfVEFHX1lUOTJYWFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE1vdG9yY29tbSBZVDkyMXggYW5kIFlUOTIyeCBzd2l0Y2hlc1wmIzM0O1xuIFx0aGVscFxuIFx0ICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0YWdnaW5nIGZyYW1lcyBmb3Jcbi1cdCAgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlcy5cbiYjNDM7XHQgIE1vdG9yY29tbSBZVDkyMXggYW5kIFlUOTIyeCBzd2l0Y2hlcy5cbiBcbiBlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9kc2EvTWFrZWZpbGUgYi9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBiOGMyNjY3Y2QxNGFhLi4yZDcyYTI1ZmQ5ODQ2IDEwMDY0NFxuLS0tIGEvbmV0L2RzYS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RzYS9NYWtlZmlsZVxuQEAgLTQyLDcgJiM0Mzs0Miw3IEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19TSkExMTA1KSAmIzQzOz0gdGFnX3NqYTExMDUub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19UUkFJTEVSKSAmIzQzOz0gdGFnX3RyYWlsZXIub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRKSAmIzQzOz0gdGFnX3ZzYzczeHhfODAyMXEub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19YUlM3MDBYKSAmIzQzOz0gdGFnX3hyczcwMHgub1xuLW9iai0kKENPTkZJR19ORVRfRFNBX1RBR19ZVDkyMVgpICYjNDM7PSB0YWdfeXQ5MjF4Lm9cbiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1lUOTJYWCkgJiM0Mzs9IHRhZ195dDkyMXgub1xuIFxuICMgZm9yIHRyYWNpbmcgZnJhbWV3b3JrIHRvIGZpbmQgdHJhY2UuaFxuIENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfeXQ5MjF4LmMgYi9uZXQvZHNhL3RhZ195dDkyMXguY1xuaW5kZXggMjk0Nzg0YWI2Njk0Yi4uYTMwMTJlYzM5ODY4NiAxMDA2NDRcbi0tLSBhL25ldC9kc2EvdGFnX3l0OTIxeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL3RhZ195dDkyMXguY1xuQEAgLTEsOCAmIzQzOzEsMTAgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuIC8qXG4gICogTW90b3Jjb21tIFlUOTIxeCBTd2l0Y2ggRXh0ZW5kZWQgQ1BVIFBvcnQgVGFnZ2luZ1xuJiM0MzsgKiBNb3RvcmNvbW0gWVQ5MjJ4IFN3aXRjaCBFeHRlbmRlZCBDUFUgUG9ydCBUYWdnaW5nXG4gICpcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMjUgRGF2aWQgWWFuZyBcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IEt5bGUgc3dpdGNoIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICpcbiAgKiAmIzQzOy0tLS0mIzQzOy0tLS0mIzQzOy0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tJiM0MzstLS0tLS0tLS1cbiAgKiB8IERBIHwgU0EgfCBUYWdFVCB8IFRhZyB8IEVUIHwgUGF5bG9hZCAuLi5cbkBAIC0xNjYsOCAmIzQzOzE2OCwxMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyB5dDkyMXhfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZWVkZWRfaGVhZHJvb20gPSBZVDkyMVhfVEFHX0xFTixcbiB9O1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtEU0EgdGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlc1wmIzM0Oyk7XG4tTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjNDM7RFNBX1RBR19EUklWRVIoeXQ5MjF4X25ldGRldl9vcHMpO1xuIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX1lUOTIxWCwgWVQ5MjFYX1RBR19OQU1FKTtcbiBcbi1tb2R1bGVfZHNhX3RhZ19kcml2ZXIoeXQ5MjF4X25ldGRldl9vcHMpO1xuJiM0MzsvKiBUbyBkZWZpbmUgdGhlIGZyb20gY3B1IHRhZyBmb3JtYXQgOCBieXRlczpcbiYjNDM7ICpcbiYjNDM7ICogMCAxIDIgMyA0IDUgNiA3IHwwIDEgMiAzIDQgNSA2IDdcbiYjNDM7ICp8XHUwMDNjLS0tLS0tLS0tLS0tVFBJRCAweDk5ODgtLS0tLS0tXHUwMDNlfFxuJiM0MzsgKnxcdTAwM2MtLVJFU0VSVkUtLVx1MDAzZXxcdTAwM2MtLS0tLURTVCBQT1ItLS0tXHUwMDNlfFxuJiM0MzsgKnwtfFx1MDAzYy0tLS0tLS0tLVJFU0VSVkUtLS0tLS0tLS0tLS1cdTAwM2V8XG4mIzQzOyAqfFx1MDAzYy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx1MDAzZXxcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1RBR19OQU1FXHRcdFx0XCYjMzQ7eXQ5MjJ4XCYjMzQ7XG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1RBR19QT1JUTUFTS18wXHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX1BPUlRNQVNLX01cdFx0R0VOTUFTSyg4LCAwKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9UQUdfUE9SVFMoeClcdFx0RklFTERfUFJFUChZVDkyMlhfVEFHX1BPUlRNQVNLX00sICh4KSlcbiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX0ZPUkNFX0RTVFx0XHRCSVQoOSlcbiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX1BSSU9fTVx0XHRHRU5NQVNLKDEyLCAxMClcbiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX1BSSU9fRU5cdFx0QklUKDEzKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9UQUdfUFJJTyh4KVx0XHQoRklFTERfUFJFUChZVDkyMlhfVEFHX1BSSU9fTSwgKHgpKSB8IFlUOTIyWF9UQUdfUFJJT19FTilcbiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX1JYX1BPUlRfTVx0XHRHRU5NQVNLKDUsIDIpXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1RBR19SWF9QUklPX01cdFx0R0VOTUFTSygxNSwgMTMpXG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxuJiM0Mzt5dDkyMnhfdGFnX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdXNlcl90b19wb3J0KG5ldGRldik7XG4mIzQzO1x0X19iZTE2ICp0YWc7XG4mIzQzO1x0dTE2IGN0cmw7XG4mIzQzO1xuJiM0MztcdHNrYl9wdXNoKHNrYiwgWVQ5MjFYX1RBR19MRU4pO1xuJiM0MztcdGRzYV9hbGxvY19ldHlwZV9oZWFkZXIoc2tiLCBZVDkyMVhfVEFHX0xFTik7XG4mIzQzO1x0dGFnID0gZHNhX2V0eXBlX2hlYWRlcl9wb3NfdHgoc2tiKTtcbiYjNDM7XG4mIzQzO1x0dGFnWzBdID0gaHRvbnMoRVRIX1BfWVQ5MjFYKTtcbiYjNDM7XHRpZiAoZHAtXHUwMDNlaW5kZXggIT0gMCkge1xuJiM0MztcdFx0LyogUG9ydCBpbmRleCBpcyBub3QgZXF1YWwgMCBpbiB0YWdbMV0gKi9cbiYjNDM7XHRcdGN0cmwgPSBZVDkyMlhfVEFHX1BSSU8oc2tiLVx1MDAzZXByaW9yaXR5KSB8IFlUOTIyWF9UQUdfRk9SQ0VfRFNUIHxcbiYjNDM7XHRcdFx0WVQ5MjJYX1RBR19QT1JUUyhkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBuZXRkZXYpIC0gMSk7XG4mIzQzO1x0XHR0YWdbMV0gPSBodG9ucyhjdHJsKTtcbiYjNDM7XHRcdHRhZ1syXSA9IDA7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIFBvcnQgMCBpbiBiaXQxNSBpbiB0YWdbMl0gKi9cbiYjNDM7XHRcdGN0cmwgPSBZVDkyMlhfVEFHX1BSSU8oc2tiLVx1MDAzZXByaW9yaXR5KSB8IFlUOTIyWF9UQUdfRk9SQ0VfRFNUO1xuJiM0MztcdFx0dGFnWzFdID0gaHRvbnMoY3RybCk7XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjJYX1RBR19QT1JUTUFTS18wO1xuJiM0MztcdFx0dGFnWzJdID0gaHRvbnMoY3RybCk7XG4mIzQzO1x0fVxuJiM0MztcdHRhZ1szXSA9IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBza2I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG4mIzQzO3l0OTIyeF90YWdfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcG9ydDtcbiYjNDM7XHRfX2JlMTYgKnRhZztcbiYjNDM7XHR1MTYgcng7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIFlUOTIxWF9UQUdfTEVOKSkpIHtcbiYjNDM7XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0YWcgPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc19yeChza2IpO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkodGFnWzBdICE9IGh0b25zKEVUSF9QX1lUOTIxWCkpKSB7XG4mIzQzO1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChcdTAwMjZuZXRkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7VW5leHBlY3RlZCBFdGhlclR5cGUgMHglMDR4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgbnRvaHModGFnWzBdKSk7XG4mIzQzO1x0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogTG9jYXRlIHdoaWNoIHBvcnQgdGhpcyBpcyBjb21pbmcgZnJvbSAqL1xuJiM0MztcdHJ4ID0gbnRvaHModGFnWzJdKTtcbiYjNDM7XHRwb3J0ID0gRklFTERfR0VUKFlUOTIyWF9UQUdfUlhfUE9SVF9NLCByeCk7XG4mIzQzO1x0c2tiLVx1MDAzZWRldiA9IGRzYV9jb25kdWl0X2ZpbmRfdXNlcihuZXRkZXYsIDAsIHBvcnQpO1xuJiM0MztcdGlmICh1bmxpa2VseSghc2tiLVx1MDAzZWRldikpIHtcbiYjNDM7XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKFx1MDAyNm5ldGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtDb3VsZG4mIzM5O3QgZGVjb2RlIHNvdXJjZSBwb3J0ICV1XFxuXCYjMzQ7LCBwb3J0KTtcbiYjNDM7XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBSZW1vdmUgdGFnIGFuZCB1cGRhdGUgY2hlY2tzdW0gKi9cbiYjNDM7XHRza2JfcHVsbF9yY3N1bShza2IsIFlUOTIxWF9UQUdfTEVOKTtcbiYjNDM7XHRkc2Ffc3RyaXBfZXR5cGVfaGVhZGVyKHNrYiwgWVQ5MjFYX1RBR19MRU4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2tiO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIHl0OTIyeF9uZXRkZXZfb3BzID0ge1xuJiM0MztcdC5uYW1lICAgPSBZVDkyMlhfVEFHX05BTUUsXG4mIzQzO1x0LnByb3RvICA9IERTQV9UQUdfUFJPVE9fWVQ5MjJYLFxuJiM0MztcdC54bWl0ICAgPSB5dDkyMnhfdGFnX3htaXQsXG4mIzQzO1x0LnJjdiAgICA9IHl0OTIyeF90YWdfcmN2LFxuJiM0MztcdC5uZWVkZWRfaGVhZHJvb20gPSBZVDkyMVhfVEFHX0xFTixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0RTQV9UQUdfRFJJVkVSKHl0OTIyeF9uZXRkZXZfb3BzKTtcbiYjNDM7TU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fWVQ5MjJYLCBZVDkyMlhfVEFHX05BTUUpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkc2FfdGFnX2RyaXZlciAqZHNhX3RhZ19kcml2ZXJfYXJyYXlbXSA9IHtcbiYjNDM7XHRcdTAwMjZEU0FfVEFHX0RSSVZFUl9OQU1FKHl0OTIxeF9uZXRkZXZfb3BzKSxcbiYjNDM7XHRcdTAwMjZEU0FfVEFHX0RSSVZFUl9OQU1FKHl0OTIyeF9uZXRkZXZfb3BzKSxcbiYjNDM7fTtcbiYjNDM7bW9kdWxlX2RzYV90YWdfZHJpdmVycyhkc2FfdGFnX2RyaXZlcl9hcnJheSk7XG4mIzQzO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7RFNBIHRhZyBkcml2ZXIgZm9yIE1vdG9yY29tbSBZVDkyMXggYW5kIFlUOTIyeCBzd2l0Y2hlc1wmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzQzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjI0IGV0aGVybmV0IHN3aXRjaCBjaGlwIHRvIHRoZSB5dDkyMXggRFNBIGRyaXZlciBhbmQgYSBjb3JyZXNwb25kaW5nIERTQSB0YWcgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIGFuIE1ESU8gZHJpdmVyIHRoYXQgcmVsaWVzIG9uIERldmljZSBUcmVlIChPRiBtYXRjaCBkYXRhKSB0byBwcm9iZSwgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBvciBkeW5hbWljYWxseSBpbmplY3RhYmxlIGluIHN0YW5kYXJkIHg4Nl82NCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIEZ1cnRoZXJtb3JlLCB0aGUgRFNBIHRhZyBkcml2ZXIgY2Fubm90IGJlIHJlYWNoZWQgYmVjYXVzZSBubyBlbXVsYXRlZCBEU0Egc3dpdGNoIChsaWtlIGRzYV9sb29wKSBjYW4gYmUgY29uZmlndXJlZCB0byB1c2UgdGhlIG5ld2x5IGFkZGVkIERTQV9UQUdfUFJPVE9fWVQ5MjJYIHByb3RvY29sLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYjkzMWU5MDJmMTgxZWExODI1MGI1OWFjOTQ3MzgyNWRkMWYyYjE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDI6MjE6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCmluZGV4IDRhYjU2N2M1YmJhZmMuLjY5YzgyNGZkOTViZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCkBAIC0xNTksMTEgJiM0MzsxNTksMTEgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNCiAJICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlcgogCSAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS4KIAotY29uZmlnIE5FVF9EU0FfWVQ5MjFYCi0JdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQmIzM0OwotCXNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVgKJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyWFgKJiM0MzsJdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGFuZCBZVDkyMjQgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCYjMzQ7CiYjNDM7CXNlbGVjdCBORVRfRFNBX1RBR19ZVDkyWFgKIAlzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQgogCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2gKJiM0MzsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgYW5kIFlUOTIyNCBldGhlcm5ldCBzd2l0Y2gKIAkgIGNoaXAuCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKaW5kZXggZDI5NzViYWRmZmMwOS4uMThjMmNlZWYwOWE1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQpAQCAtMTQsNyAmIzQzOzE0LDcgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICYjNDM7PSBsYW45MzAzX21kaW8ubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LWNvcmUubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtc3BpLm8KLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MlhYKSAmIzQzOz0geXQ5MjF4Lm8KIG9iai15CQkJCSYjNDM7PSBiNTMvCiBvYmoteQkJCQkmIzQzOz0gaGlyc2NobWFubi8KIG9iai15CQkJCSYjNDM7PSBsYW50aXEvCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMKaW5kZXggMTU5YjE2NjA2ZjZjYS4uNzQyNTU1Zjg3ODE5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYwpAQCAtMTQ4LDEwICYjNDM7MTQ4LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7CiAJCVlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDgpLAogCQlZVDkyMVhfUE9SVF9NQVNLX0VYVDAgfCBZVDkyMVhfUE9SVF9NQVNLX0VYVDEsCiAJfSwKJiM0MzsJewomIzQzOwkJJiMzNDtZVDkyMjQmIzM0OywgWVQ5MjI0X01BSk9SLCAwLCAwLAomIzQzOwkJMHgxZjEsCiYjNDM7CQkweDAsCiYjNDM7CX0sCiAJe30KIH07CiAKLSNkZWZpbmUgWVQ5MjFYX05BTUUJJiMzNDt5dDkyMXgmIzM0OwomIzQzOyNkZWZpbmUgWVQ5MlhYX05BTUUJJiMzNDt5dDkyeHgmIzM0OwogCiAjZGVmaW5lIFlUOTIxWF9WSURfVU5XQVJFCTQwOTUKIApAQCAtNTYwLDEwICYjNDM7NTY1LDEyIEBAIHl0OTIxeF9pbnRpZl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKQogc3RhdGljIGludCB5dDkyMXhfbWJ1c19pbnRfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcpCiB7CiAJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy0mZ3Q7cHJpdjsKJiM0MzsJaW50IG1heF9wb3J0czsKIAl1MTYgdmFsOwogCWludCByZXM7CiAKLQlpZiAocG9ydCAmZ3Q7PSBZVDkyMVhfUE9SVF9OVU0pCiYjNDM7CW1heF9wb3J0cyA9IHByaXYtJmd0O2NoaXBfaW5mby0mZ3Q7cG9ydHM7CiYjNDM7CWlmIChwb3J0ICZndDs9IG1heF9wb3J0cykKIAkJcmV0dXJuIFUxNl9NQVg7CiAKIAltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwpAQCAtNTc5LDkgJiM0Mzs1ODYsMTEgQEAgc3RhdGljIGludAogeXQ5MjF4X21idXNfaW50X3dyaXRlKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IGRhdGEpCiB7CiAJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy0mZ3Q7cHJpdjsKJiM0MzsJaW50IG1heF9wb3J0czsKIAlpbnQgcmVzOwogCi0JaWYgKHBvcnQgJmd0Oz0gWVQ5MjFYX1BPUlRfTlVNKQomIzQzOwltYXhfcG9ydHMgPSBwcml2LSZndDtjaGlwX2luZm8tJmd0O3BvcnRzOwomIzQzOwlpZiAocG9ydCAmZ3Q7PSBtYXhfcG9ydHMpCiAJCXJldHVybiAtRU5PREVWOwogCiAJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKQEAgLTU5NiwxOSAmIzQzOzYwNSwyMSBAQCB5dDkyMXhfbWJ1c19pbnRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKIAlzdHJ1Y3QgbWlpX2J1cyAqbWJ1czsKJiM0MzsJaW50IG1heF9wb3J0czsKIAlpbnQgcmVzOwogCiAJbWJ1cyA9IGRldm1fbWRpb2J1c19hbGxvYyhkZXYpOwogCWlmICghbWJ1cykKIAkJcmV0dXJuIC1FTk9NRU07CiAKJiM0MzsJbWF4X3BvcnRzID0gcHJpdi0mZ3Q7Y2hpcF9pbmZvLSZndDtwb3J0czsKIAltYnVzLSZndDtuYW1lID0gJiMzNDtZVDkyMXggaW50ZXJuYWwgTURJTyBidXMmIzM0OzsKIAlzbnByaW50ZihtYnVzLSZndDtpZCwgTUlJX0JVU19JRF9TSVpFLCAmIzM0OyVzJiMzNDssIGRldl9uYW1lKGRldikpOwogCW1idXMtJmd0O3ByaXYgPSBwcml2OwogCW1idXMtJmd0O3JlYWQgPSB5dDkyMXhfbWJ1c19pbnRfcmVhZDsKIAltYnVzLSZndDt3cml0ZSA9IHl0OTIxeF9tYnVzX2ludF93cml0ZTsKIAltYnVzLSZndDtwYXJlbnQgPSBkZXY7Ci0JbWJ1cy0mZ3Q7cGh5X21hc2sgPSAodTMyKX5HRU5NQVNLKFlUOTIxWF9QT1JUX05VTSAtIDEsIDApOwomIzQzOwltYnVzLSZndDtwaHlfbWFzayA9ICh1MzIpfkdFTk1BU0sobWF4X3BvcnRzIC0gMSwgMCk7CiAKIAlyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApOwogCWlmIChyZXMpCkBAIC00NzQ4LDYgJiM0Mzs0NzU5LDEzIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsKIAlpbnQgcmVzOwogCiYjNDM7CWZvciAoc2l6ZV90IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShwcml2LSZndDtwb3J0cyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1tpXTsKJiM0MzsKJiM0MzsJCXBwLSZndDtpbmRleCA9IGk7CiYjNDM7CQlJTklUX0RFTEFZRURfV09SSygmYW1wO3BwLSZndDttaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTsKJiM0MzsJfQomIzQzOwogCW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiAJcmVzID0geXQ5MjF4X2NoaXBfcmVzZXQocHJpdik7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwpAQCAtNDg2OSwxMTQgJiM0Mzs0ODg3LDkzNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHsKIAkuc2V0dXAJCQk9IHl0OTIxeF9kc2Ffc2V0dXAsCiB9OwogCi1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7c3RhdGljIGludCB5dDkyMnhfcG9ydF9kb3duKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpCiB7Ci0Jc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CWludCByZXM7CiAKLQlpZiAoIXByaXYpCi0JCXJldHVybjsKJiM0MzsJLyogbWFjIGZvcmNlIGRvd24gKi8KJiM0MzsJbWFzayA9IFlUOTIyWF9QT1JUX0xJTksgfCBZVDkyMlhfUE9SVF9SWF9NQUNfRU4gfAomIzQzOwkgICAgICAgWVQ5MjJYX1BPUlRfVFhfTUFDX0VOIHwgWVQ5MjJYX1BPUlRfTElOS19BTjsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHByaXYsIFlUOTIyWF9QT1JUbl9DVFJMKHBvcnQpLCBtYXNrKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CS8qIE5lZWQgZm9yY2Ugb3AgdG8gbWFrZSBzb2Z0IGNvbmZpZ3VyYXRpb24gZWZmZWN0aXZlICovCiYjNDM7CW1hc2sgPSBZVDkyMlhfUE9SVF9GT1JDRV9PUDsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfUE9SVG5fQ1RSTChwb3J0KSwgbWFzayk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwogCi0JZHNhX3N3aXRjaF9zaHV0ZG93bigmYW1wO3ByaXYtJmd0O2RzKTsKJiM0MzsJLyogZGlzYWJsZSBlbl9waHkgKi8KJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfVkFMVUUsIEJJVChwb3J0KSk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfT1ZFUldSSVRFLCBCSVQocG9ydCkpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7c3RhdGljIHZvaWQKJiM0Mzt5dDkyMnhfcGh5bGlua19tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJCQkgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpCiB7Ci0Jc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV9waHlsaW5rX3RvX3BvcnQoY29uZmlnKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHAtJmd0O2RzKTsKJiM0MzsJaW50IHBvcnQgPSBkcC0mZ3Q7aW5kZXg7CiYjNDM7CWludCByZXM7CiAKLQlpZiAoIXByaXYpCi0JCXJldHVybjsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjJ4X3BvcnRfZG93bihwcml2LCBwb3J0KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwogCi0JZm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi0mZ3Q7cG9ydHMpOyBpLS0gJmd0OyAwOyApIHsKLQkJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbaV07CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlkZXZfZXJyKGRwLSZndDtkcy0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxuJiMzNDssICYjMzQ7YnJpbmcgZG93biYjMzQ7LAomIzQzOwkJCXBvcnQsIHJlcyk7CiYjNDM7fQogCi0JCWRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtwcC0mZ3Q7bWliX3JlYWQpOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMnhfcG9ydF91cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJICAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsIGludCBzcGVlZCwgaW50IGR1cGxleCwKJiM0MzsJICAgICAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpCiYjNDM7ewomIzQzOwl1MzIgbWFzazsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc3BlZWQpIHsKJiM0MzsJY2FzZSBTUEVFRF8xMDoKJiM0MzsJCWN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFNQRUVEXzEwMDoKJiM0MzsJCWN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTUEVFRF8xMDAwOgomIzQzOwkJY3RybCA9IFlUOTIxWF9QT1JUX1NQRUVEXzEwMDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTUEVFRF8yNTAwOgomIzQzOwkJY3RybCA9IFlUOTIxWF9QT1JUX1NQRUVEXzI1MDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTUEVFRF8xMDAwMDoKJiM0MzsJCWN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDAwMDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQomIzQzOwlpZiAoZHVwbGV4ID09IERVUExFWF9GVUxMKQomIzQzOwkJY3RybCB8PSBZVDkyMlhfUE9SVF9EVVBMRVhfRlVMTDsKJiM0MzsJaWYgKHR4X3BhdXNlKQomIzQzOwkJY3RybCB8PSBZVDkyMlhfUE9SVF9UWF9QQVVTRTsKJiM0MzsJaWYgKHJ4X3BhdXNlKQomIzQzOwkJY3RybCB8PSBZVDkyMlhfUE9SVF9SWF9QQVVTRTsKJiM0MzsJY3RybCB8PSBZVDkyMlhfUE9SVF9SWF9NQUNfRU4gfCBZVDkyMlhfUE9SVF9UWF9NQUNfRU4gfAomIzQzOwkJWVQ5MjJYX1BPUlRfQ0ZHX1RYX0VOIHwgWVQ5MjJYX1BPUlRfTElOSyB8CiYjNDM7CQlZVDkyMlhfUE9SVF9DRkdfUlhfRU47CiYjNDM7CWN0cmwgJmFtcDs9IH4oWVQ5MjJYX1BPUlRfRkNfQU4gfCBZVDkyMlhfUE9SVF9MSU5LX0FOKTsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUE9SVG5fQ1RSTChwb3J0KSwgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwkvKiBmb3JjZSBvcCAqLwomIzQzOwltYXNrID0gWVQ5MjJYX1BPUlRfRk9SQ0VfT1A7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCksIG1hc2spOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKIAotCWRzYV91bnJlZ2lzdGVyX3N3aXRjaCgmYW1wO3ByaXYtJmd0O2RzKTsKJiM0MzsJLyogZW5hYmxlIGVuX3BoeSAqLwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfVkFMVUUsIEJJVChwb3J0KSk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfT1ZFUldSSVRFLCBCSVQocG9ydCkpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKIAotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShwcml2LSZndDthY2xfYmxrcyk7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCB5dDkyMXhfYWNsX2JsayAqYWNsYmxrID0gcHJpdi0mZ3Q7YWNsX2Jsa3NbaV07CiYjNDM7CXJldHVybiAwOwomIzQzO30KIAotCQlpZiAoIWFjbGJsaykKLQkJCWNvbnRpbnVlOwotCQlmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUoYWNsYmxrLSZndDtydWxlcyk7IGomIzQzOyYjNDM7KSB7Ci0JCQlzdHJ1Y3QgeXQ5MjF4X2FjbF9ydWxlICphY2xydWxlID0gYWNsYmxrLSZndDtydWxlc1tqXTsKJiM0MztzdGF0aWMgdm9pZAomIzQzO3l0OTIyeF9waHlsaW5rX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLAomIzQzOwkJCSAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHVuc2lnbmVkIGludCBtb2RlLAomIzQzOwkJCSAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsIGludCBzcGVlZCwgaW50IGR1cGxleCwKJiM0MzsJCQkgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV9waHlsaW5rX3RvX3BvcnQoY29uZmlnKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHAtJmd0O2RzKTsKJiM0MzsJaW50IHBvcnQgPSBkcC0mZ3Q7aW5kZXg7CiYjNDM7CWludCByZXM7CiAKLQkJCWlmICghYWNscnVsZSkKLQkJCQljb250aW51ZTsKLQkJCWt2ZnJlZShhY2xydWxlKTsKLQkJfQotCQlrdmZyZWUoYWNsYmxrKTsKLQl9Ci0JbXV0ZXhfZGVzdHJveSgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjJ4X3BvcnRfdXAocHJpdiwgcG9ydCwgbW9kZSwgaW50ZXJmYWNlLCBzcGVlZCwgZHVwbGV4LAomIzQzOwkJCSAgICAgdHhfcGF1c2UsIHJ4X3BhdXNlKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZGV2X2VycihkcC0mZ3Q7ZHMtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcbiYjMzQ7LCAmIzM0O2JyaW5nIHVwJiMzNDssCiYjNDM7CQkJcG9ydCwgcmVzKTsKIH0KIAotc3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIyeF9pbnRpZl9leHRfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgKnZhbHApCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDttZGlvZGV2LSZndDtkZXY7Ci0Jc3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbzsKLQlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzOwomIzQzOwlpbnQgcmVzOwogCi0JcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwotCWlmICghcHJpdikKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWlmIChwb3J0ICZndDs9IFlUOTIyWF9QT1JUX05VTSkKJiM0MzsJCXJldHVybiAtRU5PREVWOwogCi0JbWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpOwotCWlmICghbWRpbykKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBwb3J0LCBZVDkyWFhfUEFHRV9TRUxFQ1QsIHJlZyk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwogCi0JbWRpby0mZ3Q7YnVzID0gbWRpb2Rldi0mZ3Q7YnVzOwotCW1kaW8tJmd0O2FkZHIgPSBtZGlvZGV2LSZndDthZGRyOwotCW1kaW8tJmd0O3N3aXRjaGlkID0gMDsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX3JlYWQocHJpdiwgcG9ydCwgWVQ5MlhYX1BBR0UsIHZhbHApOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKIAotCW11dGV4X2luaXQoJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KIAotCXByaXYtJmd0O3JlZ19vcHMgPSAmYW1wO3l0OTIxeF9yZWdfb3BzX21kaW87Ci0JcHJpdi0mZ3Q7cmVnX2N0eCA9IG1kaW87CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9pbnRpZl9leHRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXM7CiAKLQlmb3IgKHNpemVfdCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocHJpdi0mZ3Q7cG9ydHMpOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1tpXTsKJiM0MzsJaWYgKHBvcnQgJmd0Oz0gWVQ5MjFYX1BPUlRfTlVNKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiAKLQkJcHAtJmd0O2luZGV4ID0gaTsKLQkJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtwcC0mZ3Q7bWliX3JlYWQsIHl0OTIxeF9wb2xsX21pYik7Ci0JfQomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfd3JpdGUocHJpdiwgcG9ydCwgWVQ5MlhYX1BBR0VfU0VMRUNULCByZWcpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKIAotCWRzID0gJmFtcDtwcml2LSZndDtkczsKLQlkcy0mZ3Q7ZGV2ID0gZGV2OwotCWRzLSZndDthc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7Ci0JZHMtJmd0O2RzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7Ci0JZHMtJmd0O3ByaXYgPSBwcml2OwotCWRzLSZndDtvcHMgPSAmYW1wO3l0OTIxeF9kc2Ffc3dpdGNoX29wczsKLQlkcy0mZ3Q7YWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDA7Ci0JZHMtJmd0O2FnZWluZ190aW1lX21heCA9IFUxNl9NQVggKiA1MDAwOwotCWRzLSZndDtwaHlsaW5rX21hY19vcHMgPSAmYW1wO3l0OTIxeF9waHlsaW5rX21hY19vcHM7Ci0JZHMtJmd0O251bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07Ci0JZHMtJmd0O251bV9wb3J0cyA9IFlUOTIxWF9QT1JUX05VTTsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIHBvcnQsIFlUOTJYWF9QQUdFLCB2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKIAotCW1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KIAotCXJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTsKJiM0MztzdGF0aWMgaW50IHl0OTIyeF9pbnRlcm5hbF9waHlhZGRyX2dldChpbnQgcG9ydCwKJiM0MzsJCQkJICAgICAgIGVudW0geXQ5MjJ4X3BoeV9yZWdfdHlwZSByZWdfdHlwZSwKJiM0MzsJCQkJICAgICAgIGVudW0geXQ5MjJ4X3BoeV9yZWdfc3BhY2UgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgJmd0Oz0gNCAmYW1wOyZhbXA7IHBvcnQgJmx0Oz0gNykgewomIzQzOwkJc3dpdGNoIChyZWdfdHlwZSkgewomIzQzOwkJY2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQ6CiYjNDM7CQkJcmVzID0gOTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9QSFlfQ09NTU9OX0VYVDoKJiM0MzsJCQlpZiAocG9ydCAmbHQ7PSA1ICZhbXA7JmFtcDsgcG9ydCAmZ3Q7PSA0KQomIzQzOwkJCQlyZXMgPSA0OwomIzQzOwkJCWVsc2UgaWYgKHBvcnQgJmx0Oz0gNyAmYW1wOyZhbXA7IHBvcnQgJmd0Oz0gNikKJiM0MzsJCQkJcmVzID0gNjsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVDoKJiM0MzsJCQlyZXMgPSAtRUlOVkFMOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlpZiAocmVnX3NwYWNlICE9IFlUOTIyWF9QSFlfUkVHX1NQQUNFX1BIWSkKJiM0MzsJCQkJcmVzID0gLUVJTlZBTDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChwb3J0ID09IDgpIHsKJiM0MzsJCQlzd2l0Y2ggKHJlZ190eXBlKSB7CiYjNDM7CQkJY2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQ6CiYjNDM7CQkJCXJlcyA9IDk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVDoKJiM0MzsJCQkJcmVzID0gODsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJY2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX01JSToKJiM0MzsJCQljYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfRVhUOgomIzQzOwkJCQlpZiAocmVnX3NwYWNlID09IFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJIHx8CiYjNDM7CQkJCSAgICByZWdfc3BhY2UgPT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfVVNYR01JSSkKJiM0MzsJCQkJCXJlcyA9IDg7CiYjNDM7CQkJCWVsc2UKJiM0MzsJCQkJCXJlcyA9IC1FSU5WQUw7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWRlZmF1bHQ6CiYjNDM7CQkJCXJlcyA9IC1FSU5WQUw7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwkJfQomIzQzOwkJc3dpdGNoIChyZWdfdHlwZSkgewomIzQzOwkJY2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQ6CiYjNDM7CQkJcmVzID0gOTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVDoKJiM0MzsJCQlyZXMgPSAwOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX01JSToKJiM0MzsJCWNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9FWFQ6CiYjNDM7CQkJaWYgKHJlZ19zcGFjZSA9PSBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSB8fAomIzQzOwkJCSAgICByZWdfc3BhY2UgPT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfVVNYR01JSSkKJiM0MzsJCQkJcmVzID0gMDsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCXJlcyA9IC1FSU5WQUw7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCXJlcyA9IC1FSU5WQUw7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5MjF4X29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICYjMzQ7bW90b3Jjb21tLHl0OTIxNSYjMzQ7IH0sCiYjNDM7c3RhdGljIGludCB5dDkyMnhfcG9ydF9zZHNfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LAomIzQzOwkJCQlwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJaW50IGFkZHI7CiYjNDM7CXUxNiBkYXRhOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlhZGRyID0geXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0KHBvcnQsCiYjNDM7CQkJCQkgICBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhULAomIzQzOwkJCQkJICAgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkpOwomIzQzOwlpZiAoYWRkciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJLyogd3JpdGUgcHJvdGVjdCAqLwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NGJlLCAweGQpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJLyogQ0RSICovCiYjNDM7CWlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMEJBU0VYKSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDA2LCAweDApOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwkJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQxNiwgMHgzNDU4KTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MDYsIDB4ODAwKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJCXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MTYsIDB4NDU1OCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsJLyogUExMICovCiYjNDM7CWlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2EsIDB4MTAwNik7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDNmLCAweDMwMjkpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwkJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQyYSwgMHhmMDcwKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2QsIDB4MjA3ZCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDNjLCAweDIwN2QpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwkJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzZiwgMHgzMDMyKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJCXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2EsIDB4Nik7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDJhLCAweGYwNzApOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CS8qIFZDTyAqLwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDM5LCAweEMwKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CS8qIFZkYWMgKi8KJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ5MiwgMHg3ZjdmKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTEsIDB4N2YpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJLyogRXllICovCiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0NTQsIDB4ZjE0KTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTcsIDB4YTQ0KTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0Y2QsIDB4MCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NGFmLCAweDQ1ZTMpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ4YSwgMHhmZmYpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQwOCwgMHg3YzAwKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0ZDYsIDB4N2YpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ0ZiwgMHhmZjA4KTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CS8qIEZGRSAqLwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDhlLCAweDdkMDApOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweGQsIDB4NjBmKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CS8qIENUTEUgKi8KJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRiMCwgMHg4MDQpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRiMSwgMHg3Nzc0KTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0YWYsIDB4NDVlNyk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4MywgMHg1NjAzKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CW1zbGVlcCgyMCk7CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTIsIDB4N2ZmZik7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDkyLCAweDdmN2YpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJLyogQ1RMRSAqLwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4MjAwMCwgMHg0MCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4MjAwMCwgMHgwKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4MTA0MiwgMHg0OGMpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7ICAgIC8qIHNvZnQgcmVzZXQgKi8KJiM0MzsJYWRkciA9IHl0OTIyeF9pbnRlcm5hbF9waHlhZGRyX2dldChwb3J0LCBZVDkyMlhfUEhZX1JFR19UWVBFX01JSSwKJiM0MzsJCQkJCSAgIFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJKTsKJiM0MzsJaWYgKGFkZHIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX3JlYWQocHJpdiwgYWRkciwgMHgyMDAwLCAmYW1wO2RhdGEpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJZGF0YSAmYW1wOz0gfigxICZsdDsmbHQ7IDE1KTsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIGFkZHIsIDB4MjAwMCwgZGF0YSk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlhZGRyID0geXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0KHBvcnQsIFlUOTIyWF9QSFlfUkVHX1RZUEVfTUlJLAomIzQzOwkJCQkJICAgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfVVNYR01JSSk7CiYjNDM7CWlmIChhZGRyICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9yZWFkKHByaXYsIGFkZHIsIDB4MCwgJmFtcDtkYXRhKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CWRhdGEgfD0gMSAmbHQ7Jmx0OyAxNTsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIGFkZHIsIDB4MCwgZGF0YSk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIyeF9wb3J0X2NvbmZpZyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJCSAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpCiYjNDM7ewomIzQzOwlpbnQgYWRkcjsKJiM0MzsJdTE2IGRhdGE7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQocG9ydCwKJiM0MzsJCQkJCSAgIFlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQsCiYjNDM7CQkJCQkgICBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSk7CiYjNDM7CWlmIChhZGRyICZsdDsgMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlzd2l0Y2ggKGludGVyZmFjZSkgewomIzQzOwkvKiBTRVJERVMgKi8KJiM0MzsJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMEJBU0VYOgomIzQzOwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDoKJiM0MzsJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSToKJiM0MzsJCXJlcyA9IHl0OTIyeF9wb3J0X3Nkc19pbml0KHByaXYsIHBvcnQsIGludGVyZmFjZSk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CQlhZGRyID0geXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0CiYjNDM7CQkJKHBvcnQsIFlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQsCiYjNDM7CQkJIFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJKTsKJiM0MzsJCWlmIChhZGRyICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCXJlcyA9IHl0OTIyeF9pbnRpZl9leHRfcmVhZChwcml2LCBhZGRyLCBZVDkyMlhfUE9SVF9TRFNfTU9ERSwKJiM0MzsJCQkJCSAgICAmYW1wO2RhdGEpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkJZGF0YSAmYW1wOz0gKH4weDcgJmx0OyZsdDsgNCk7CiYjNDM7CQlzd2l0Y2ggKGludGVyZmFjZSkgewomIzQzOwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6CiYjNDM7CQkJZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sCiYjNDM7CQkJCQkgICBZVDkyWFhfU0VSREVTX01PREVfU0dNSUkpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwQkFTRVg6CiYjNDM7CQkJZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sCiYjNDM7CQkJCQkgICBZVDkyWFhfU0VSREVTX01PREVfMTAwQkFTRVgpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYOgomIzQzOwkJCWRhdGEgfD0gRklFTERfUFJFUChZVDkyMlhfUE9SVF9TRFNfTU9ERV9NLAomIzQzOwkJCQkJICAgWVQ5MlhYX1NFUkRFU19NT0RFXzEwMDBCQVNFWCk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVg6CiYjNDM7CQkJZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sCiYjNDM7CQkJCQkgICBZVDkyWFhfU0VSREVTX01PREVfMjUwMEJBU0VYKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6CiYjNDM7CQkJZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sCiYjNDM7CQkJCQkgICBZVDkyWFhfU0VSREVTX01PREVfVVNYR01JSSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwkJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCBZVDkyMlhfUE9SVF9TRFNfTU9ERSwKJiM0MzsJCQkJCSAgICAgZGF0YSk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO3l0OTIyeF9waHlsaW5rX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLAomIzQzOwkJCSAgY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcC0mZ3Q7ZHMpOwomIzQzOwlpbnQgcG9ydCA9IGRwLSZndDtpbmRleDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjJ4X3BvcnRfY29uZmlnKHByaXYsIHBvcnQsIG1vZGUsIHN0YXRlLSZndDtpbnRlcmZhY2UpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlkZXZfZXJyKGRwLSZndDtkcy0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxuJiMzNDssICYjMzQ7Y29uZmlnJiMzNDssCiYjNDM7CQkJcG9ydCwgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgeXQ5MjJ4X3BoeWxpbmtfbWFjX29wcyA9IHsKJiM0MzsJLm1hY19saW5rX2Rvd24JPSB5dDkyMnhfcGh5bGlua19tYWNfbGlua19kb3duLAomIzQzOwkubWFjX2xpbmtfdXAJPSB5dDkyMnhfcGh5bGlua19tYWNfbGlua191cCwKJiM0MzsJLm1hY19jb25maWcJPSB5dDkyMnhfcGh5bGlua19tYWNfY29uZmlnLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbAomIzQzO3l0OTIyeF9kc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCSAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSkKJiM0Mzt7CiYjNDM7CXJldHVybiBEU0FfVEFHX1BST1RPX1lUOTIyWDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0Mzt5dDkyMnhfZHNhX3BoeWxpbmtfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7CiYjNDM7CWNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyAqaW5mbyA9IHByaXYtJmd0O2luZm87CiYjNDM7CiYjNDM7CWNvbmZpZy0mZ3Q7bWFjX2NhcGFiaWxpdGllcyA9IE1BQ19BU1lNX1BBVVNFIHwgTUFDX1NZTV9QQVVTRSB8CiYjNDM7CQkJCSAgIE1BQ18xMCB8IE1BQ18xMDAgfCBNQUNfMTAwMDsKJiM0MzsKJiM0MzsJaWYgKGluZm8tJmd0O2ludGVybmFsX21hc2sgJmFtcDsgQklUKHBvcnQpKSB7CiYjNDM7CQlpZiAocG9ydCAmZ3Q7PSA0ICZhbXA7JmFtcDsgcG9ydCAmbHQ7PSA3KSB7CiYjNDM7CQkJLyogcG9ydCA0IHRvIHBvcnQgNywgaW50ZXJuYWwgdXRwICovCiYjNDM7CQkJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCwKJiM0MzsJCQkJICBjb25maWctJmd0O3N1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsJCQljb25maWctJmd0O21hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzI1MDBGRDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSwKJiM0MzsJCQkJICBjb25maWctJmd0O3N1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsJCQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMEJBU0VYLAomIzQzOwkJCQkgIGNvbmZpZy0mZ3Q7c3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwkJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLAomIzQzOwkJCQkgIGNvbmZpZy0mZ3Q7c3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwkJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYLAomIzQzOwkJCQkgIGNvbmZpZy0mZ3Q7c3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwkJCWNvbmZpZy0mZ3Q7bWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMEZEOwomIzQzOwkJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSwKJiM0MzsJCQkJICBjb25maWctJmd0O3N1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsJCQljb25maWctJmd0O21hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzI1MDBGRDsKJiM0MzsJCQljb25maWctJmd0O21hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzUwMDBGRDsKJiM0MzsJCQljb25maWctJmd0O21hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDAwRkQ7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBleHRlcm5hbCBwb3J0IHdpbGwgYWRkZWQgbGF0ZXIgKi8KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHl0OTIyeF9wb3J0X3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSAmYW1wO3ByaXYtJmd0O2RzOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CS8qIGVuYWJsZSB1c2VyIHBvcnQgaXNvbGF0aW9uIGFuZCBkaXNhYmxlIGZkYiBsZWFybmluZyAqLwomIzQzOwljdHJsID0gfnByaXYtJmd0O2NwdV9wb3J0c19tYXNrOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9QT1JUbl9JU09MQVRJT04ocG9ydCksIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJbWFzayA9IFlUOTIyWF9QT1JUX0xFQVJOX0RJUzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfUE9SVG5fTEVBUk4ocG9ydCksIG1hc2spOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpIHsKJiM0MzsJCWN0cmwgPSB+KHUzMikwOwomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfUE9SVG5fSVNPTEFUSU9OKHBvcnQpLAomIzQzOwkJCQkgICAgICAgY3RybCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXQ5MjJ4X2RzYV9wb3J0X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIyeF9wb3J0X3NldHVwKHByaXYsIHBvcnQpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvICppbmZvOwomIzQzOwl1MzIgY2hpcGlkOwomIzQzOwl1MzIgbWFqb3I7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ0hJUF9JRCwgJmFtcDtjaGlwaWQpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJbWFqb3IgPSBGSUVMRF9HRVQoWVQ5MjFYX0NISVBfSURfTUFKT1IsIGNoaXBpZCk7CiYjNDM7CWZvciAoaW5mbyA9IHl0OTIxeF9pbmZvczsgaW5mby0mZ3Q7bmFtZTsgaW5mbyYjNDM7JiM0MzspCiYjNDM7CQlpZiAoaW5mby0mZ3Q7bWFqb3IgPT0gbWFqb3IpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CWlmICghaW5mby0mZ3Q7bmFtZSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7VW5leHBlY3RlZCBjaGlwaWQgMHgleFxuJiMzNDssIGNoaXBpZCk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwlwcml2LSZndDtpbmZvID0gaW5mbzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjJ4X2NoaXBfZGV0ZWN0KHByaXYpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJLyogUmVzZXQgKi8KJiM0MzsJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUlNULCBZVDkyMVhfUlNUX0hXKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWZzbGVlcChZVDkyMVhfUlNUX0RFTEFZX1VTKTsKJiM0MzsKJiM0MzsJdmFsID0gMDsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9SU1QsIH4wLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB5dDkyMnhfY2hpcF9zZXR1cF9kc2Eoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBjcHVfcG9ydHNfbWFzazsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCBwb3J0OwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwljdHJsID0gR0VOTUFTSyg5LCAwKTsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfRklMVEVSX1VOS19VQ0FTVCwgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwljdHJsID0gMDsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBwcml2LSZndDtjaGlwX2luZm8tJmd0O3BvcnRzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWN0cmwgfD0gWVQ5MjJYX0FDVF9VTktfQUNUbl9UUkFQKGkpOwomIzQzOwljcHVfcG9ydHNfbWFzayA9IHByaXYtJmd0O2NwdV9wb3J0c19tYXNrOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KHBvcnQsICZhbXA7Y3B1X3BvcnRzX21hc2ssIHByaXYtJmd0O2NoaXBfaW5mby0mZ3Q7cG9ydHMpIHsKJiM0MzsJCWN0cmwgJmFtcDs9IH5ZVDkyMlhfQUNUX1VOS19BQ1RuX00ocG9ydCk7CiYjNDM7CQljdHJsIHw9IFlUOTIyWF9BQ1RfVU5LX0FDVG5fRFJPUChwb3J0KTsKJiM0MzsJfQomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9BQ1RfVU5LX1VDQVNULCBjdHJsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0FDVF9VTktfTUNBU1QsIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWN0cmwgPSBZVDkyMlhfRlVOQ19NSUIgfCBZVDkyMlhfRlVOQ19BQ0w7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjFYX0ZVTkMsIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjJ4X2NoaXBfc2V0dXBfZHNhKHByaXYpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXQ5MjJ4X2NwdV90YWdfbW9kZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwomIzQzOwl1MTYgZXRoX3BfdGFnOwomIzQzOwl1MzIgdmFsOwomIzQzOwl1MzIgdmFsMTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJLyogY3B1IHRhZyBtb2RlIHNldCAqLwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjJYX0NQVV9UQUdfUlhfQ1RSTCwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIyWF9DUFVfVEFHX1RYX0NUUkwsICZhbXA7dmFsMSk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwl2YWwgJmFtcDs9IH5ZVDkyMlhfQ1BVX1RBR19SWF9NT0RFOwomIzQzOwl2YWwxICZhbXA7PSB+WVQ5MjJYX0NQVV9UQUdfVFhfTU9ERTsKJiM0MzsJdmFsMSAmYW1wOz0gfllUOTIyWF9DUFVfVEFHX1RYX1RZUEU7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0NQVV9UQUdfUlhfQ1RSTCwgdmFsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0NQVV9UQUdfVFhfQ1RSTCwgdmFsMSk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkvKiB0cGlkIGNoZWNrICovCiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ1BVX1RBR19UUElELCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlldGhfcF90YWcgPSBGSUVMRF9HRVQoWVQ5MjFYX0NQVV9UQUdfVFBJRF9UUElEX00sIHZhbCk7CiYjNDM7CWlmIChldGhfcF90YWcgIT0gRVRIX1BfWVQ5MjFYKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtUYWcgdHlwZSAweCV4ICE9IDB4JXhcbiYjMzQ7LCBldGhfcF90YWcsCiYjNDM7CQkJRVRIX1BfWVQ5MjFYKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHl0OTIyeF9jcHVfcG9ydF9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gJmFtcDtwcml2LSZndDtkczsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CS8qIGNwdSB0YWcgbW9kZSAqLwomIzQzOwlyZXMgPSB5dDkyMnhfY3B1X3RhZ19tb2RlX3NldChwcml2KTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CS8qIEVuYWJsZSBEU0EgKi8KJiM0MzsJcHJpdi0mZ3Q7Y3B1X3BvcnRzX21hc2sgPSBkc2FfY3B1X3BvcnRzKGRzKTsKJiM0MzsJY3RybCA9IFlUOTIxWF9FWFRfQ1BVX1BPUlRfVEFHX0VOIHwgWVQ5MjFYX0VYVF9DUFVfUE9SVF9QT1JUX0VOIHwKJiM0MzsJICAgICAgIFlUOTIxWF9FWFRfQ1BVX1BPUlRfUE9SVChfX2Zmcyhwcml2LSZndDtjcHVfcG9ydHNfbWFzaykpOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9FWFRfQ1BVX1BPUlQsIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJLyogU2V0dXAgc29mdHdhcmUgc3dpdGNoICovCiYjNDM7CWN0cmwgPSBZVDkyMlhfQ1BVX0NPUFlfVE9fRVhUX0NQVTsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQ1BVX0NPUFksIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB5dDkyMnhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LSZndDtvZl9ub2RlOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMnhfY2hpcF9yZXNldChwcml2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJLyogUmVnaXN0ZXIgdGhlIGludGVybmFsIG1kaW8gYnVzLiAqLwomIzQzOwljaGlsZCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCAmIzM0O21kaW8mIzM0Oyk7CiYjNDM7CWlmIChjaGlsZCkgewomIzQzOwkJcmVzID0geXQ5MjF4X21idXNfaW50X2luaXQocHJpdiwgY2hpbGQpOwomIzQzOwkJb2Zfbm9kZV9wdXQoY2hpbGQpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CSAvKiBjcHUgcG9ydCBzZXQgKi8KJiM0MzsJIG11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CSByZXMgPSB5dDkyMnhfY3B1X3BvcnRfc2V0KHByaXYpOwomIzQzOwkgbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjJ4X2NoaXBfc2V0dXAocHJpdik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIyeF9kc2Ffc3dpdGNoX29wcyA9IHsKJiM0MzsJLyogcG9ydCAqLwomIzQzOwkuZ2V0X3RhZ19wcm90b2NvbAk9IHl0OTIyeF9kc2FfZ2V0X3RhZ19wcm90b2NvbCwKJiM0MzsJLnBoeWxpbmtfZ2V0X2NhcHMJPSB5dDkyMnhfZHNhX3BoeWxpbmtfZ2V0X2NhcHMsCiYjNDM7CS5wb3J0X3NldHVwCQk9IHl0OTIyeF9kc2FfcG9ydF9zZXR1cCwKJiM0MzsJLyogY2hpcCAqLwomIzQzOwkuc2V0dXAJCQk9IHl0OTIyeF9kc2Ffc2V0dXAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTJ4eF9jaGlwX2luZm8geXQ5Mnh4X2NoaXBfaW5mb190YWJsZVtdID0gewomIzQzOwlbWVQ5MjE1XSA9IHsKJiM0MzsJCS5tb2RlID0gWVQ5MjE1LAomIzQzOwkJLm5hbWUgPSAmIzM0O21vdG9yY29tbSB5dDkyMTUmIzM0OywKJiM0MzsJCS5wb3J0cyA9IFlUOTIxWF9QT1JUX05VTSwKJiM0MzsJCS5sYWdfaWQgPSBZVDkyMVhfTEFHX05VTSwKJiM0MzsJCS5hZ2VpbmdfdGltZV9taW4gPSAxICogNTAwMCwKJiM0MzsJCS5hZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMCwKJiM0MzsJCS5zd2l0Y2hfb3BzID0gJmFtcDt5dDkyMXhfZHNhX3N3aXRjaF9vcHMsCiYjNDM7CQkubWFjX29wcyA9ICZhbXA7eXQ5MjF4X3BoeWxpbmtfbWFjX29wcywKJiM0MzsJfSwKJiM0MzsJW1lUOTIyNF0gPSB7CiYjNDM7CQkubW9kZSA9IFlUOTIyNCwKJiM0MzsJCS5uYW1lID0gJiMzNDttb3RvcmNvbW0geXQ5MjI0JiMzNDssCiYjNDM7CQkucG9ydHMgPSBZVDkyMlhfUE9SVF9OVU0sCiYjNDM7CQkubGFnX2lkID0gWVQ5MjJYX0xBR19OVU0sCiYjNDM7CQkuYWdlaW5nX3RpbWVfbWluID0gMSAqIDYwMDAsCiYjNDM7CQkuYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDYwMDAsCiYjNDM7CQkuc3dpdGNoX29wcyA9ICZhbXA7eXQ5MjJ4X2RzYV9zd2l0Y2hfb3BzLAomIzQzOwkJLm1hY19vcHMgPSAmYW1wO3l0OTIyeF9waHlsaW5rX21hY19vcHMsCiYjNDM7CX0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB5dDkyeHhfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpOwomIzQzOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRzYV9zd2l0Y2hfc2h1dGRvd24oJmFtcDtwcml2LSZndDtkcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHl0OTJ4eF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpOwomIzQzOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtJmd0O3BvcnRzKTsgaS0tICZndDsgMDsgKSB7CiYjNDM7CQlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1tpXTsKJiM0MzsKJiM0MzsJCWRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtwcC0mZ3Q7bWliX3JlYWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRzYV91bnJlZ2lzdGVyX3N3aXRjaCgmYW1wO3ByaXYtJmd0O2RzKTsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHByaXYtJmd0O2FjbF9ibGtzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB5dDkyMXhfYWNsX2JsayAqYWNsYmxrID0gcHJpdi0mZ3Q7YWNsX2Jsa3NbaV07CiYjNDM7CiYjNDM7CQlpZiAoIWFjbGJsaykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWZvciAodW5zaWduZWQgaW50IGogPSAwOyBqICZsdDsgQVJSQVlfU0laRShhY2xibGstJmd0O3J1bGVzKTsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgeXQ5MjF4X2FjbF9ydWxlICphY2xydWxlID0gYWNsYmxrLSZndDtydWxlc1tqXTsKJiM0MzsKJiM0MzsJCQlpZiAoIWFjbHJ1bGUpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCWt2ZnJlZShhY2xydWxlKTsKJiM0MzsJCX0KJiM0MzsJCWt2ZnJlZShhY2xibGspOwomIzQzOwl9CiYjNDM7CW11dGV4X2Rlc3Ryb3koJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXQ5Mnh4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHl0OTJ4eF9jaGlwX2luZm8gKmNvbXBhdF9pbmZvID0gTlVMTDsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDttZGlvZGV2LSZndDtkZXY7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdjsKJiM0MzsJc3RydWN0IGRzYV9zd2l0Y2ggKmRzOwomIzQzOwomIzQzOwljb21wYXRfaW5mbyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwomIzQzOwlpZiAoIWNvbXBhdF9pbmZvKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CW1kaW8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1kaW8pLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFtZGlvKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CW1kaW8tJmd0O2J1cyA9IG1kaW9kZXYtJmd0O2J1czsKJiM0MzsJbWRpby0mZ3Q7YWRkciA9IG1kaW9kZXYtJmd0O2FkZHI7CiYjNDM7CW1kaW8tJmd0O3N3aXRjaGlkID0gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7Y2hpcF9pbmZvID0gY29tcGF0X2luZm87CiYjNDM7CXByaXYtJmd0O3JlZ19vcHMgPSAmYW1wO3l0OTIxeF9yZWdfb3BzX21kaW87CiYjNDM7CXByaXYtJmd0O3JlZ19jdHggPSBtZGlvOwomIzQzOwomIzQzOwlkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CWRzLSZndDtkZXYgPSBkZXY7CiYjNDM7CWRzLSZndDthc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7CiYjNDM7CWRzLSZndDtkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlOwomIzQzOwlkcy0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CWRzLSZndDtvcHMgPSBjb21wYXRfaW5mby0mZ3Q7c3dpdGNoX29wczsKJiM0MzsJZHMtJmd0O2FnZWluZ190aW1lX21pbiA9IGNvbXBhdF9pbmZvLSZndDthZ2VpbmdfdGltZV9taW47CiYjNDM7CWRzLSZndDthZ2VpbmdfdGltZV9tYXggPSBjb21wYXRfaW5mby0mZ3Q7YWdlaW5nX3RpbWVfbWF4OwomIzQzOwlkcy0mZ3Q7cGh5bGlua19tYWNfb3BzID0gY29tcGF0X2luZm8tJmd0O21hY19vcHM7CiYjNDM7CWRzLSZndDtudW1fbGFnX2lkcyA9IGNvbXBhdF9pbmZvLSZndDtsYWdfaWQ7CiYjNDM7CWRzLSZndDtudW1fcG9ydHMgPSBjb21wYXRfaW5mby0mZ3Q7cG9ydHM7CiYjNDM7CiYjNDM7CW1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7CiYjNDM7CiYjNDM7CXJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5Mnh4X29mX21hdGNoW10gPSB7CiYjNDM7CXsKJiM0MzsJCS5jb21wYXRpYmxlID0gJiMzNDttb3RvcmNvbW0seXQ5MjE1JiMzNDssCiYjNDM7CQkuZGF0YSA9ICZhbXA7eXQ5Mnh4X2NoaXBfaW5mb190YWJsZVtZVDkyMTVdLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkuY29tcGF0aWJsZSA9ICYjMzQ7bW90b3Jjb21tLHl0OTIyNCYjMzQ7LAomIzQzOwkJLmRhdGEgPSAmYW1wO3l0OTJ4eF9jaGlwX2luZm9fdGFibGVbWVQ5MjI0XSwKJiM0MzsJfSwKIAl7fQogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTIxeF9vZl9tYXRjaCk7CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeXQ5Mnh4X29mX21hdGNoKTsKIAotc3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7Ci0JLnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsCi0JLnJlbW92ZSA9IHl0OTIxeF9tZGlvX3JlbW92ZSwKLQkuc2h1dGRvd24gPSB5dDkyMXhfbWRpb19zaHV0ZG93biwKJiM0MztzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTJ4eF9tZGlvX2RyaXZlciA9IHsKJiM0MzsJLnByb2JlID0geXQ5Mnh4X21kaW9fcHJvYmUsCiYjNDM7CS5yZW1vdmUgPSB5dDkyeHhfbWRpb19yZW1vdmUsCiYjNDM7CS5zaHV0ZG93biA9IHl0OTJ4eF9tZGlvX3NodXRkb3duLAogCS5tZGlvZHJ2LmRyaXZlciA9IHsKLQkJLm5hbWUgPSBZVDkyMVhfTkFNRSwKLQkJLm9mX21hdGNoX3RhYmxlID0geXQ5MjF4X29mX21hdGNoLAomIzQzOwkJLm5hbWUgPSBZVDkyWFhfTkFNRSwKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IHl0OTJ4eF9vZl9tYXRjaCwKIAl9LAogfTsKIAotbWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7CiYjNDM7bWRpb19tb2R1bGVfZHJpdmVyKHl0OTJ4eF9tZGlvX2RyaXZlcik7CiAKIE1PRFVMRV9BVVRIT1IoJiMzNDtEYXZpZCBZYW5nICZsdDttbXlhbmdmbEBnbWFpbC5jb20mZ3Q7JiMzNDspOwotTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7RHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IFN3aXRjaCYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7S3lsZSBTd2l0Y2ggJmx0O2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtEcml2ZXIgZm9yIE1vdG9yY29tbSBZVDkyMXggYW5kIFlUOTIyeCBTd2l0Y2gmIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaAppbmRleCA1ZjNiOTllMTg5YzQxLi4wMzA4ZTZiOTE2MThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oCkBAIC04MzcsNiAmIzQzOzgzNyw3IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMgewogCiAjZGVmaW5lIFlUOTIxNV9NQUpPUgkweDkwMDIKICNkZWZpbmUgWVQ5MjE4X01BSk9SCTB4OTAwMQomIzQzOyNkZWZpbmUgWVQ5MjI0X01BSk9SCTB4OTAwNAogCiAvKiByZXF1aXJlZCBmb3IgYSBoYXJkIHJlc2V0ICovCiAjZGVmaW5lIFlUOTIxWF9SU1RfREVMQVlfVVMJMTAwMDAKQEAgLTg1Myw2ICYjNDM7ODU0LDk2IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMgewogLyogOCBpbnRlcm5hbCAmIzQzOyAyIGV4dGVybmFsICYjNDM7IDEgbWN1ICovCiAjZGVmaW5lIFlUOTIxWF9QT1JUX05VTQkJCTExCiAKJiM0MzsvKiB5dDkyMnggcmVnaXN0ZXIgbGlzdHMgKi8KJiM0MzsjZGVmaW5lIFlUOTJYWF9QQUdFX1NFTEVDVAkweDFlCiYjNDM7I2RlZmluZSBZVDkyWFhfUEFHRQkJMHgxZgomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCkgICAgICAgICAgICAgICAgKDB4ODAwODAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX0NUUkxfUEFVU0VfQU4gICAgICBCSVQoMTApCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVG5fU1RBVFVTKHBvcnQpICAgICAgKDB4ODAyMDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lIFlUOTIyWF9FTl9QSFlfT1ZFUldSSVRFICAgKDB4ODAwNDApCiYjNDM7I2RlZmluZSBZVDkyMlhfRU5fUEhZX1ZBTFVFICAgICAgICgweDgwMDNjKQomIzQzOy8qIENUUkw6IGZvcmNlIG9wIHRvIG1ha2Ugc29mdCBjb25maWd1cmF0aW9uIGVmZmVjdGl2ZSAqLwomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfRk9SQ0VfT1AgICAgICAgICAgIEJJVCgxNCkKJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX0NGR19UWF9FTiAgICAgICBCSVQoMTMpCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9DRkdfUlhfRU4gICAgICAgQklUKDEyKQomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfRkNfQU4gICAgICAgICAgICBCSVQoMTEpCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9MSU5LX0FOICAgICAgICAgICAgQklUKDEwKSAgLyogQ1RSTDogYXV0byBuZWdvdGlhdGlvbiAqLwomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfTElOSyAgICAgICAgICAgICAgIEJJVCg5KSAgLyogQ1RSTDogbGluayBzdGF0dXMgKi8KJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX0hBTEZfUEFVU0UgICAgICAgICBCSVQoOCkgIC8qIEhhbGYtZHVwbGV4IGJhY2sgcHJlc3N1cmUgbW9kZSAqLwomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfRFVQTEVYX0ZVTEwgICAgICAgICAgICAgICAgQklUKDcpCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9SWF9QQVVTRSAgICAgICAgICAgQklUKDYpCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9UWF9QQVVTRSAgICAgICAgICAgQklUKDUpCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9SWF9NQUNfRU4gICAgICAgICAgQklUKDQpCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9UWF9NQUNfRU4gICAgICAgICAgQklUKDMpCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9TUEVFRF9NICAgICAgICAgICAgR0VOTUFTSygyLCAwKQomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfU0RTX01PREUgICAgICAgICAgIDB4NDAwCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9TRFNfTU9ERV9NICAgICAgICAgR0VOTUFTSyg2LCA0KQomIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFX1NHTUlJICAgICAgICAgICAgICAgICAgICAgICAwCiYjNDM7I2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfUkVWU0dNSUkgICAgICAgICAgICAgICAgICAgIDEKJiM0MzsjZGVmaW5lIFlUOTJYWF9TRVJERVNfTU9ERV8xMDAwQkFTRVggICAgICAgICAgICAgICAgICAgMgomIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFXzEwMEJBU0VYICAgICAgICAgICAgICAgICAgICAzCiYjNDM7I2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfMjUwMEJBU0VYICAgICAgICAgICAgICAgICAgIDQKJiM0MzsjZGVmaW5lIFlUOTJYWF9TRVJERVNfTU9ERV9VU1hHTUlJICAgICAgICAgICAgICAgICAgICAgNgomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKJiM0MzsvKiBMQUcgKi8KJiM0MzsjZGVmaW5lIFlUOTIyWF9MQUdfTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAomIzQzOy8qIElTTyAqLwomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRuX0lTT0xBVElPTihwb3J0KSAgICAgICAgICAgKDB4NCAqIChwb3J0KSAmIzQzOyAweDE4MGQ4MCkKJiM0MzsvKiBGREIgKi8KJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUbl9MRUFSTihwb3J0KSAgICAgICAoMHgxODAzMDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX0xFQVJOX0RJUyAgICAgICAgICBCSVQoMTgpCiYjNDM7LyogR0xPQkFMIENUUkwgKi8KJiM0MzsjZGVmaW5lICBZVDkyMlhfRlVOQ19BQ0wgICAgICAgICAgICAgICBCSVQoNSkKJiM0MzsjZGVmaW5lICBZVDkyMlhfRlVOQ19NSUIgICAgICAgICAgICAgICBCSVQoNCkKJiM0MzsvKiBDVFJMIFBLVCAqLwomIzQzOyNkZWZpbmUgWVQ5MjJYX0ZJTFRFUl9VTktfVUNBU1QgICAgICAgICAgICAgICAgICAgICAgICAweDE4MGVjOAomIzQzOyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfVUNBU1QgICAgICAgICAgICAgICAgICAgMHgxODBlZDgKJiM0MzsjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX01DQVNUICAgICAgICAgICAgICAgICAgIDB4MTgwZWUwCiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19NQ0FTVF9CWVBBU1NfRFJPUF9QSU0gICBCSVQoMjIpCiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19NQ0FTVF9CWVBBU1NfRFJPUF9NTEQgICBCSVQoMjEpCiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19NQ0FTVF9CWVBBU1NfRFJPUF9JR01QICBCSVQoMjApCiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX00ocG9ydCkgICAgICAgICAgICBHRU5NQVNLKDIgKiAocG9ydCkgJiM0MzsgMSwgMiAqIChwb3J0KSkKJiM0MzsjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX0FDVG4ocG9ydCwgeCkgICAgICAgICAgICgoeCkgJmx0OyZsdDsgKDIgKiAocG9ydCkpKQomIzQzOyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfQUNUbl9GT1JXQVJEKHBvcnQpICAgICAgWVQ5MjJYX0FDVF9VTktfQUNUbihwb3J0LCAwKSAgLyogZmxvb2QgKi8KJiM0MzsjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX0FDVG5fVFJBUChwb3J0KSAgICAgICAgIFlUOTIyWF9BQ1RfVU5LX0FDVG4ocG9ydCwgMykgIC8qIHN0ZWVyIHRvIENQVSAqLwomIzQzOyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfQUNUbl9EUk9QKHBvcnQpICAgICAgICAgWVQ5MjJYX0FDVF9VTktfQUNUbihwb3J0LCAxKSAgLyogZGlzY2FyZCAqLwomIzQzOy8qIE5FVkVSIHVzZSB0aGlzIGFjdGlvbjsgc2VlIGNvbW1lbnRzIGluIHRoZSB0YWcgZHJpdmVyICovCiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX0NPUFkocG9ydCkgICAgICAgICBZVDkyMlhfQUNUX1VOS19BQ1RuKHBvcnQsIDIpICAvKiBmbG9vZCBhbmQgY29weSAqLwomIzQzOwomIzQzOy8qIENQVSBQT1JUICovCiYjNDM7I2RlZmluZSBZVDkyMlhfQ1BVX0NPUFkJCQkweDE4MTEwMAomIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9DT1BZX1RPX0lOVF9DUFUJQklUKDEpCiYjNDM7I2RlZmluZSBZVDkyMlhfQ1BVX0NPUFlfVE9fRVhUX0NQVQlCSVQoMCkKJiM0MzsjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1JYX0NUUkwJCTB4ODA1MDQKJiM0MzsjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1JYX01PREUJCUJJVCgwKQomIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfQ1RSTAkJMHgxMDA3MTAKJiM0MzsjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1RYX1RZUEUJCUJJVCgwKQomIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfTU9ERQkJQklUKDEpCiYjNDM7I2RlZmluZSBZVDkyMlhfQ1BVX1RBR19UWF9DVEFHX09QCUJJVCgyKQomIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfU1RBR19PUAlCSVQoMykKJiM0MzsKJiM0MztlbnVtIHl0OTIyeF9waHlfcmVnX3R5cGUgewomIzQzOwlZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQsCiYjNDM7CVlUOTIyWF9QSFlfUkVHX1RZUEVfUEhZX0NPTU1PTl9FWFQsCiYjNDM7CVlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQsCiYjNDM7CVlUOTIyWF9QSFlfUkVHX1RZUEVfTUlJLAomIzQzOwlZVDkyMlhfUEhZX1JFR19UWVBFX0VYVCwKJiM0MzsJWVQ5MjJYX1BIWV9SRUdfVFlQRV9NTUQxLAomIzQzOwlZVDkyMlhfUEhZX1JFR19UWVBFX01NRDMsCiYjNDM7CVlUOTIyWF9QSFlfUkVHX1RZUEVfTU1ENywKJiM0MzsJWVQ5MjJYX1BIWV9SRUdfVFlQRV9NQVgKJiM0Mzt9OwomIzQzOwomIzQzO2VudW0geXQ5MjJ4X3BoeV9yZWdfc3BhY2UgewomIzQzOwlZVDkyMlhfUEhZX1JFR19TUEFDRV9QSFksCiYjNDM7CVlUOTIyWF9QSFlfUkVHX1NQQUNFX1BIWV9UMSwKJiM0MzsJWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfUEhZX0xEUywKJiM0MzsJWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUksCiYjNDM7CVlUOTIyWF9QSFlfUkVHX1NQQUNFX1VTWEdNSUksCiYjNDM7CVlUOTIyWF9QSFlfUkVHX1NQQUNFX1FTR01JSSwKJiM0MzsJWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfTUFYCiYjNDM7fTsKJiM0MzsKICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSAmbHQ7IDgpCiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICgocG9ydCkgPT0gOCB8fCAocG9ydCkgPT0gOSkKIApAQCAtOTQ1LDkgJiM0MzsxMDM2LDI2IEBAIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7CiAJaW50ICgqd3JpdGUpKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiB2YWwpOwogfTsKIAomIzQzO2VudW0geXQ5Mnh4X21vZGUgewomIzQzOwlZVDkyMTUsCiYjNDM7CVlUOTIyNCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCB5dDkyeHhfY2hpcF9pbmZvIHsKJiM0MzsJZW51bSB5dDkyeHhfbW9kZSBtb2RlOwomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwl1bnNpZ25lZCBpbnQgcG9ydHM7CiYjNDM7CXVuc2lnbmVkIGludCBsYWdfaWQ7CiYjNDM7CXVuc2lnbmVkIGludCBhZ2VpbmdfdGltZV9taW47CiYjNDM7CXVuc2lnbmVkIGludCBhZ2VpbmdfdGltZV9tYXg7CiYjNDM7CWNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyAqc3dpdGNoX29wczsKJiM0MzsJY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyAqbWFjX29wczsKJiM0Mzt9OwomIzQzOwogc3RydWN0IHl0OTIxeF9wcml2IHsKIAlzdHJ1Y3QgZHNhX3N3aXRjaCBkczsKIAomIzQzOwljb25zdCBzdHJ1Y3QgeXQ5Mnh4X2NoaXBfaW5mbyAqY2hpcF9pbmZvOwogCWNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyAqaW5mbzsKIAl1bnNpZ25lZCBpbnQgbWV0ZXJfc2xvdF9uczsKIAl1bnNpZ25lZCBpbnQgcG9ydF9zaGFwZV9zbG90X25zOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHNhLmggYi9pbmNsdWRlL25ldC9kc2EuaAppbmRleCA2ZjdmNWMxN2I1MzIwLi4wYzAzM2NhNjViOTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc2EuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9kc2EuaApAQCAtNjAsNiAmIzQzOzYwLDcgQEAgc3RydWN0IHRjX2FjdGlvbjsKICNkZWZpbmUgRFNBX1RBR19QUk9UT19NWEw4NjJfVkFMVUUJCTMyCiAjZGVmaW5lIERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRQkJMzMKICNkZWZpbmUgRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFCQkzNAomIzQzOyNkZWZpbmUgRFNBX1RBR19QUk9UT19ZVDkyMlhfVkFMVUUgICAgICAgICAgICAgIDM1CiAKIGVudW0gZHNhX3RhZ19wcm90b2NvbCB7CiAJRFNBX1RBR19QUk9UT19OT05FCQk9IERTQV9UQUdfUFJPVE9fTk9ORV9WQUxVRSwKQEAgLTk3LDYgJiM0Mzs5OCw3IEBAIGVudW0gZHNhX3RhZ19wcm90b2NvbCB7CiAJRFNBX1RBR19QUk9UT19NWEw4NjIJCT0gRFNBX1RBR19QUk9UT19NWEw4NjJfVkFMVUUsCiAJRFNBX1RBR19QUk9UT19ORVRDCQk9IERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRSwKIAlEU0FfVEFHX1BST1RPX0tTWjg0NjMJCT0gRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFLAomIzQzOwlEU0FfVEFHX1BST1RPX1lUOTIyWAkJPSBEU0FfVEFHX1BST1RPX1lUOTIyWF9WQUxVRSwKIH07CiAKIHN0cnVjdCBkc2Ffc3dpdGNoOwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9LY29uZmlnIGIvbmV0L2RzYS9LY29uZmlnCmluZGV4IGQ1ZTcyNWI5MGQ3ODUuLmU0ZmQzYTlhNjYyMTEgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL0tjb25maWcKQEAgLTIxNSwxMCAmIzQzOzIxNSwxMCBAQCBjb25maWcgTkVUX0RTQV9UQUdfWFJTNzAwWAogCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yCiAJICBBcnJvdyBTcGVlZENoaXBzIFhSUzcwMHggc3dpdGNoZXMgdGhhdCB1c2UgYSBzaW5nbGUgYnl0ZSB0YWcgdHJhaWxlci4KIAotY29uZmlnIE5FVF9EU0FfVEFHX1lUOTIxWAotCXRyaXN0YXRlICYjMzQ7VGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlcyYjMzQ7CiYjNDM7Y29uZmlnIE5FVF9EU0FfVEFHX1lUOTJYWAomIzQzOwl0cmlzdGF0ZSAmIzM0O1RhZyBkcml2ZXIgZm9yIE1vdG9yY29tbSBZVDkyMXggYW5kIFlUOTIyeCBzd2l0Y2hlcyYjMzQ7CiAJaGVscAogCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yCi0JICBNb3RvcmNvbW0gWVQ5MjF4IHN3aXRjaGVzLgomIzQzOwkgIE1vdG9yY29tbSBZVDkyMXggYW5kIFlUOTIyeCBzd2l0Y2hlcy4KIAogZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9kc2EvTWFrZWZpbGUgYi9uZXQvZHNhL01ha2VmaWxlCmluZGV4IGI4YzI2NjdjZDE0YWEuLjJkNzJhMjVmZDk4NDYgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RzYS9NYWtlZmlsZQpAQCAtNDIsNyAmIzQzOzQyLDcgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1NKQTExMDUpICYjNDM7PSB0YWdfc2phMTEwNS5vCiBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfVFJBSUxFUikgJiM0Mzs9IHRhZ190cmFpbGVyLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRKSAmIzQzOz0gdGFnX3ZzYzczeHhfODAyMXEubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1hSUzcwMFgpICYjNDM7PSB0YWdfeHJzNzAweC5vCi1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfWVQ5MjFYKSAmIzQzOz0gdGFnX3l0OTIxeC5vCiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1lUOTJYWCkgJiM0Mzs9IHRhZ195dDkyMXgubwogCiAjIGZvciB0cmFjaW5nIGZyYW1ld29yayB0byBmaW5kIHRyYWNlLmgKIENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpCmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ195dDkyMXguYyBiL25ldC9kc2EvdGFnX3l0OTIxeC5jCmluZGV4IDI5NDc4NGFiNjY5NGIuLmEzMDEyZWMzOTg2ODYgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX3l0OTIxeC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdGFnX3l0OTIxeC5jCkBAIC0xLDggJiM0MzsxLDEwIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgogLyoKICAqIE1vdG9yY29tbSBZVDkyMXggU3dpdGNoIEV4dGVuZGVkIENQVSBQb3J0IFRhZ2dpbmcKJiM0MzsgKiBNb3RvcmNvbW0gWVQ5MjJ4IFN3aXRjaCBFeHRlbmRlZCBDUFUgUG9ydCBUYWdnaW5nCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDI1IERhdmlkIFlhbmcgJmx0O21teWFuZ2ZsQGdtYWlsLmNvbSZndDsKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgS3lsZSBzd2l0Y2ggJmx0O2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tJmd0OwogICoKICAqICYjNDM7LS0tLSYjNDM7LS0tLSYjNDM7LS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0mIzQzOy0tLS0tLS0tLQogICogfCBEQSB8IFNBIHwgVGFnRVQgfCBUYWcgfCBFVCB8IFBheWxvYWQgLi4uCkBAIC0xNjYsOCAmIzQzOzE2OCwxMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyB5dDkyMXhfbmV0ZGV2X29wcyA9IHsKIAkubmVlZGVkX2hlYWRyb29tID0gWVQ5MjFYX1RBR19MRU4sCiB9OwogCi1NT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtEU0EgdGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlcyYjMzQ7KTsKLU1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwomIzQzO0RTQV9UQUdfRFJJVkVSKHl0OTIxeF9uZXRkZXZfb3BzKTsKIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX1lUOTIxWCwgWVQ5MjFYX1RBR19OQU1FKTsKIAotbW9kdWxlX2RzYV90YWdfZHJpdmVyKHl0OTIxeF9uZXRkZXZfb3BzKTsKJiM0MzsvKiBUbyBkZWZpbmUgdGhlIGZyb20gY3B1IHRhZyBmb3JtYXQgOCBieXRlczoKJiM0MzsgKgomIzQzOyAqIDAgMSAyIDMgNCA1IDYgNyB8MCAxIDIgMyA0IDUgNiA3CiYjNDM7ICp8Jmx0Oy0tLS0tLS0tLS0tLVRQSUQgMHg5OTg4LS0tLS0tLSZndDt8CiYjNDM7ICp8Jmx0Oy0tUkVTRVJWRS0tJmd0O3wmbHQ7LS0tLS1EU1QgUE9SLS0tLSZndDt8CiYjNDM7ICp8LXwmbHQ7LS0tLS0tLS0tUkVTRVJWRS0tLS0tLS0tLS0tLSZndDt8CiYjNDM7ICp8Jmx0Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSZndDt8CiYjNDM7ICovCiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX05BTUUJCQkmIzM0O3l0OTIyeCYjMzQ7CiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX1BPUlRNQVNLXzAJCUJJVCgxNSkKJiM0MzsjZGVmaW5lIFlUOTIyWF9UQUdfUE9SVE1BU0tfTQkJR0VOTUFTSyg4LCAwKQomIzQzOyNkZWZpbmUgWVQ5MjJYX1RBR19QT1JUUyh4KQkJRklFTERfUFJFUChZVDkyMlhfVEFHX1BPUlRNQVNLX00sICh4KSkKJiM0MzsjZGVmaW5lIFlUOTIyWF9UQUdfRk9SQ0VfRFNUCQlCSVQoOSkKJiM0MzsjZGVmaW5lIFlUOTIyWF9UQUdfUFJJT19NCQlHRU5NQVNLKDEyLCAxMCkKJiM0MzsjZGVmaW5lIFlUOTIyWF9UQUdfUFJJT19FTgkJQklUKDEzKQomIzQzOyNkZWZpbmUgWVQ5MjJYX1RBR19QUklPKHgpCQkoRklFTERfUFJFUChZVDkyMlhfVEFHX1BSSU9fTSwgKHgpKSB8IFlUOTIyWF9UQUdfUFJJT19FTikKJiM0MzsjZGVmaW5lIFlUOTIyWF9UQUdfUlhfUE9SVF9NCQlHRU5NQVNLKDUsIDIpCiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX1JYX1BSSU9fTQkJR0VOTUFTSygxNSwgMTMpCiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICoKJiM0Mzt5dDkyMnhfdGFnX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdXNlcl90b19wb3J0KG5ldGRldik7CiYjNDM7CV9fYmUxNiAqdGFnOwomIzQzOwl1MTYgY3RybDsKJiM0MzsKJiM0MzsJc2tiX3B1c2goc2tiLCBZVDkyMVhfVEFHX0xFTik7CiYjNDM7CWRzYV9hbGxvY19ldHlwZV9oZWFkZXIoc2tiLCBZVDkyMVhfVEFHX0xFTik7CiYjNDM7CXRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3R4KHNrYik7CiYjNDM7CiYjNDM7CXRhZ1swXSA9IGh0b25zKEVUSF9QX1lUOTIxWCk7CiYjNDM7CWlmIChkcC0mZ3Q7aW5kZXggIT0gMCkgewomIzQzOwkJLyogUG9ydCBpbmRleCBpcyBub3QgZXF1YWwgMCBpbiB0YWdbMV0gKi8KJiM0MzsJCWN0cmwgPSBZVDkyMlhfVEFHX1BSSU8oc2tiLSZndDtwcmlvcml0eSkgfCBZVDkyMlhfVEFHX0ZPUkNFX0RTVCB8CiYjNDM7CQkJWVQ5MjJYX1RBR19QT1JUUyhkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBuZXRkZXYpIC0gMSk7CiYjNDM7CQl0YWdbMV0gPSBodG9ucyhjdHJsKTsKJiM0MzsJCXRhZ1syXSA9IDA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBQb3J0IDAgaW4gYml0MTUgaW4gdGFnWzJdICovCiYjNDM7CQljdHJsID0gWVQ5MjJYX1RBR19QUklPKHNrYi0mZ3Q7cHJpb3JpdHkpIHwgWVQ5MjJYX1RBR19GT1JDRV9EU1Q7CiYjNDM7CQl0YWdbMV0gPSBodG9ucyhjdHJsKTsKJiM0MzsJCWN0cmwgPSBZVDkyMlhfVEFHX1BPUlRNQVNLXzA7CiYjNDM7CQl0YWdbMl0gPSBodG9ucyhjdHJsKTsKJiM0MzsJfQomIzQzOwl0YWdbM10gPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gc2tiOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgomIzQzO3l0OTIyeF90YWdfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgcG9ydDsKJiM0MzsJX19iZTE2ICp0YWc7CiYjNDM7CXUxNiByeDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgWVQ5MjFYX1RBR19MRU4pKSkgewomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwl0YWcgPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc19yeChza2IpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkodGFnWzBdICE9IGh0b25zKEVUSF9QX1lUOTIxWCkpKSB7CiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZCgmYW1wO25ldGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgICYjMzQ7VW5leHBlY3RlZCBFdGhlclR5cGUgMHglMDR4XG4mIzM0OywKJiM0MzsJCQkJICAgICBudG9ocyh0YWdbMF0pKTsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogTG9jYXRlIHdoaWNoIHBvcnQgdGhpcyBpcyBjb21pbmcgZnJvbSAqLwomIzQzOwlyeCA9IG50b2hzKHRhZ1syXSk7CiYjNDM7CXBvcnQgPSBGSUVMRF9HRVQoWVQ5MjJYX1RBR19SWF9QT1JUX00sIHJ4KTsKJiM0MzsJc2tiLSZndDtkZXYgPSBkc2FfY29uZHVpdF9maW5kX3VzZXIobmV0ZGV2LCAwLCBwb3J0KTsKJiM0MzsJaWYgKHVubGlrZWx5KCFza2ItJmd0O2RldikpIHsKJiM0MzsJCWRldl93YXJuX3JhdGVsaW1pdGVkKCZhbXA7bmV0ZGV2LSZndDtkZXYsCiYjNDM7CQkJCSAgICAgJiMzNDtDb3VsZG4mIzM5O3QgZGVjb2RlIHNvdXJjZSBwb3J0ICV1XG4mIzM0OywgcG9ydCk7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFJlbW92ZSB0YWcgYW5kIHVwZGF0ZSBjaGVja3N1bSAqLwomIzQzOwlza2JfcHVsbF9yY3N1bShza2IsIFlUOTIxWF9UQUdfTEVOKTsKJiM0MzsJZHNhX3N0cmlwX2V0eXBlX2hlYWRlcihza2IsIFlUOTIxWF9UQUdfTEVOKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNrYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyB5dDkyMnhfbmV0ZGV2X29wcyA9IHsKJiM0MzsJLm5hbWUgICA9IFlUOTIyWF9UQUdfTkFNRSwKJiM0MzsJLnByb3RvICA9IERTQV9UQUdfUFJPVE9fWVQ5MjJYLAomIzQzOwkueG1pdCAgID0geXQ5MjJ4X3RhZ194bWl0LAomIzQzOwkucmN2ICAgID0geXQ5MjJ4X3RhZ19yY3YsCiYjNDM7CS5uZWVkZWRfaGVhZHJvb20gPSBZVDkyMVhfVEFHX0xFTiwKJiM0Mzt9OwomIzQzOwomIzQzO0RTQV9UQUdfRFJJVkVSKHl0OTIyeF9uZXRkZXZfb3BzKTsKJiM0MztNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19ZVDkyMlgsIFlUOTIyWF9UQUdfTkFNRSk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBkc2FfdGFnX2RyaXZlciAqZHNhX3RhZ19kcml2ZXJfYXJyYXlbXSA9IHsKJiM0MzsJJmFtcDtEU0FfVEFHX0RSSVZFUl9OQU1FKHl0OTIxeF9uZXRkZXZfb3BzKSwKJiM0MzsJJmFtcDtEU0FfVEFHX0RSSVZFUl9OQU1FKHl0OTIyeF9uZXRkZXZfb3BzKSwKJiM0Mzt9OwomIzQzO21vZHVsZV9kc2FfdGFnX2RyaXZlcnMoZHNhX3RhZ19kcml2ZXJfYXJyYXkpOwomIzQzOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O0RTQSB0YWcgZHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IGFuZCBZVDkyMnggc3dpdGNoZXMmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiYjNDM7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDY2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGU/IEEgRGVlcCBEaXZlIGludG8gdGhlIFlUOTIyNCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIyNCBzd2l0Y2ggY2hpcCB0byB0aGUgYHl0OTIxeGAgRFNBIGRyaXZlci4gIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cywgJiMzNDtIb3cgY2FuIEkgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGUgaW4gYSB0ZXN0aW5nIGVudmlyb25tZW50PyYjMzQ7IEl0JiMzOTtzIG1vZGlmeWluZyBgeXQ5MjF4LmNgLCBgeXQ5MjF4LmhgLCBgdGFnX3l0OTIxeC5jYCwgYW5kIHRoZSBLY29uZmlnL01ha2VmaWxlcyDigJMgYWxsIGdvb2Qgc3R1ZmYsIGJ1dCB1c2VsZXNzIGlmIEkgY2FuJiMzOTt0IHRyaWdnZXIgaXQuCgpSaWdodCwgc28gaXQmIzM5O3MgYW4gTURJTyBkcml2ZXIgKGB5dDkyeHhfbWRpb19kcml2ZXJgKS4gSXQgcmVnaXN0ZXJzIHVzaW5nIGBtZGlvX21vZHVsZV9kcml2ZXIoKWAuIFRoYXQgbWVhbnMgRGV2aWNlIFRyZWUgaXMgcHJvYmFibHkgdGhlIGtleSB0byBnZXR0aW5nIGl0IHByb2JlZC4gIENhbiBJIGVtdWxhdGUgdGhhdD8gQ2FuIEkgZmFrZSBpdCB3aXRoIGEgc29mdHdhcmUgTURJTyBidXM/IFN5emthbGxlciYjMzk7cyBncmVhdCwgYnV0IGRvZXMgaXQgaGF2ZSBhbnkgTURJTyBtYWdpYz8gIE5vLCBub3QgYSBnZW5lcmljIGZ1enplciB1bmxlc3MgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gdGhlIHN1YnN5c3RlbS4gSG1tLCBzeXprYWxsZXIgKmNhbiogcHJvYmUgZGV2aWNlcyBpZiBpdCBoYXMgRFQgbm9kZXMsIGJ1dCBubyBhcmJpdHJhcnkgTURJTyBub2Rlcy4gRGFtbi4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2suIEFueSBvdGhlciBlbnRyeSBwb2ludD8gIEhvdyBhYm91dCBgeXQ5Mnh4X21kaW9fcHJvYmVgPyAgSXQgcmVxdWlyZXMgYG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YSgpYCwgc28gaXQmIzM5O3MgZGVmaW5pdGVseSB0aWVkIHRvIERldmljZSBUcmVlIChgeXQ5Mnh4X29mX21hdGNoYCkuICBTbywgd2l0aG91dCBhIHJlYWwgZGV2aWNlIG9yIGEgY3VzdG9tIFFFTVUgc2V0dXAsIEkmIzM5O20gc3R1Y2suICBTeXprYWxsZXImIzM5O3MgYHN5el9kZXZsaW5rYCBpc24mIzM5O3QgZ29pbmcgdG8gaGVscC4gIElzIHRoZXJlIGV2ZW4gYW55IGVtdWxhdGlvbiBmb3IgdGhlIFlUOTIxNS9ZVDkyMjQgaW4gUUVNVT8gTm8uIFNvLCBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMgYXJlIGRlYWQgZW5kcyBmb3IgdGhpcyBwcm9iZSBmdW5jdGlvbi4gVGhlIGRyaXZlciYjMzk7cyBwcm9iZSBjb2RlIGxvb2tzIHVucmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbG9vayBkZWVwZXIuICBgeXQ5MjJ4X3RhZ194bWl0YCBhbmQgYHl0OTIyeF90YWdfcmN2YCBhcmUgaW4gYHRhZ195dDkyMXguY2AuIERTQSB0YWcgZHJpdmVycyBhcmUgb2Z0ZW4gYSBzZXBhcmF0ZSBiZWFzdC4gT2theSwgc28gRFNBIHRhZ2dlcnMgKmNvdWxkKiBiZSBoaXQgaWYgYSBEU0Egc3dpdGNoIGlzIGluc3RhbnRpYXRlZCwgb3IgaWYgSSBjYW4gc2V0IHRoZSB0YWcgcHJvdG9jb2wgb24gYSBnZW5lcmljIERTQSBzd2l0Y2ggbGlrZSBgZHNhX2xvb3BgIG9yIGBzYW5kYm94YC4gTm93IHdlJiMzOTtyZSBnZXR0aW5nIHNvbWV3aGVyZS4gV2FpdCwgSSBjYW4gYWN0dWFsbHkgKmNoYW5nZSogdGhlIHRhZyBwcm90b2NvbCBvbiBgZHNhX2xvb3BgPyAgWWVzISBUaW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuY2AKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkc2FfbG9vcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3Q9MTU5PWFsbCBhdHRhY2hlZCBzd2l0Y2ggcG9ydHMgbXVzdCBiZSBkb3duIHdoaWxlIGRvaW5nIHRoaXMpLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0LTE2MC1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdDoxNjE6SXQgaXMgZGVzaXJhYmxlIHRoYXQgYWxsIHRhZ2dpbmcgcHJvdG9jb2xzIGFyZSB0ZXN0YWJsZSB3aXRoIHRoZSBgYGRzYV9sb29wYGBcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdC0xNjItbW9ja3VwIGRyaXZlciwgd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHRvIGFueSBuZXR3b3JrIGludGVyZmFjZS4gVGhlIGdvYWwgaXMgdGhhdFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZT0zPWJjbS1zZjItb2Jqc1x0XHRcdDo9IGJjbV9zZjIubyBiY21fc2YyX2NmcC5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfTkVUX0RTQV9MT09QKVx0JiM0Mzs9IGRzYV9sb29wLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXHQmIzQzOz0ga3M4OTk1Lm9cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1OnN0cnVjdCBkc2FfbG9vcF92bGFuIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI2LVx0dTE2IG1lbWJlcnM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjktXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMDpzdHJ1Y3QgZHNhX2xvb3BfbWliX2VudHJ5IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxLVx0Y2hhciBuYW1lW0VUSF9HU1RSSU5HX0xFTl07XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTplbnVtIGRzYV9sb29wX21pYl9jb3VudGVycyB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNi1cdERTQV9MT09QX1BIWV9SRUFEX09LLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM6c3RydWN0IGRzYV9sb29wX3BvcnQge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ6XHRzdHJ1Y3QgZHNhX2xvb3BfbWliX2VudHJ5IG1pYltfX0RTQV9MT09QX0NOVF9NQVhdO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDUtXHR1MTYgcHZpZDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5OnN0cnVjdCBkc2FfbG9vcF9wcml2IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwLVx0c3RydWN0IG1paV9idXNcdCpidXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MS1cdHVuc2lnbmVkIGludFx0cG9ydF9iYXNlO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTI6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiB2bGFuc1tWTEFOX05fVklEXTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUzLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU0Olx0c3RydWN0IGRzYV9sb29wX3BvcnQgcG9ydHNbRFNBX01BWF9QT1JUU107XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01NS19O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1NzpzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTgtXHQvKiBNdXN0IGJlIGZpcnN0LCBzdWNoIHRoYXQgZHNhX3JlZ2lzdGVyX3N3aXRjaCgpIGNhbiBhY2Nlc3MgdGhpc1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTY2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Njc6c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgZHNhX2xvb3BfbWlic1tdID0ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjgtXHRbRFNBX0xPT1BfUEhZX1JFQURfT0tdXHQ9IHsgXCYjMzQ7cGh5X3JlYWRfb2tcJiMzNDssIH0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NzU9c3RhdGljIHN0cnVjdCBtZGlvX2RldmljZSAqc3dpdGNoX21kaW9kZXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy03Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc3OmVudW0gZHNhX2xvb3BfZGV2bGlua19yZXNvdXJjZV9pZCB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy03OC1cdERTQV9MT09QX0RFVkxJTktfUEFSQU1fSURfTk9ORSwgIC8qIERFVkxJTktfUkVTT1VSQ0VfSURfUEFSRU5UX1RPUCAqL1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgxLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODI6c3RhdGljIHU2NCBkc2FfbG9vcF9kZXZsaW5rX3Z0dV9nZXQodm9pZCAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgzLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjg0Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg1LVx0dW5zaWduZWQgaW50IGksIGNvdW50ID0gMDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjg2Olx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODctXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo5NzpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk4LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk5LVx0c3RydWN0IGRldmxpbmtfcmVzb3VyY2Vfc2l6ZV9wYXJhbXMgc2l6ZV9wYXJhbXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMDA6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTAxLVx0aW50IGVycjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMTUtXHRcdFx0XHRcdCAgICAgIERTQV9MT09QX0RFVkxJTktfUEFSQU1fSURfVlRVLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTE2Olx0XHRcdFx0XHQgICAgICBkc2FfbG9vcF9kZXZsaW5rX3Z0dV9nZXQsIHBzKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNy1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMjQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMjU6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBkc2FfbG9vcF9nZXRfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVx0XHRcdFx0XHRcdCAgIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEzMy1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNDpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEzNS17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMzY6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTM3LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTM5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZHMtXHUwMDNlbnVtX3BvcnRzOyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE0MDpcdFx0bWVtY3B5KHBzLVx1MDAzZXBvcnRzW2ldLm1pYiwgZHNhX2xvb3BfbWlicyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE0MTpcdFx0ICAgICAgIHNpemVvZihkc2FfbG9vcF9taWJzKSk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDItXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTQ0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQ1Olx0cmV0dXJuIGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ni19XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDctXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDg6c3RhdGljIHZvaWQgZHNhX2xvb3BfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTQ5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNTItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNTM6c3RhdGljIGludCBkc2FfbG9vcF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE1NC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTYxOnN0YXRpYyB2b2lkIGRzYV9sb29wX2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjItXHRcdFx0XHQgdTMyIHN0cmluZ3NldCwgdWludDhfdCAqZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2My17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTY1LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTczLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTc0OnN0YXRpYyB2b2lkIGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNzUtXHRcdFx0XHQgICAgICAgdWludDY0X3QgKmRhdGEpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNzYte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTc3Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3OC1cdHVuc2lnbmVkIGludCBpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4My1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE4NDpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xODUte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTg2Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4Ny1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTk4LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTk5OnN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3dyaXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDAtXHRcdFx0ICAgICAgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAxLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIwMjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDMtXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHMtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIxNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIxNTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIxNi1cdFx0XHRcdCAgICAgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIyNS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIyNjpzdGF0aWMgdm9pZCBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI3LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkc2FfYnJpZGdlIGJyaWRnZSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyMzM6c3RhdGljIHZvaWQgZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzQtXHRcdFx0XHRcdHU4IHN0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzOS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI0MDpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0MS1cdFx0XHRcdFx0Ym9vbCB2bGFuX2ZpbHRlcmluZyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNDktXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTA6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNTEtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNTUtXHRib29sIHB2aWQgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1BWSUQ7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTY6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU3LVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBzLVx1MDAzZWJ1cztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1ODpcdHN0cnVjdCBkc2FfbG9vcF92bGFuICp2bDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1OS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyODM6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODQtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbilcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODYtXHRib29sIHVudGFnZ2VkID0gdmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4NzpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODgtXHR1MTYgcHZpZCA9IHBzLVx1MDAzZXBvcnRzW3BvcnRdLnB2aWQ7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODktXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHMtXHUwMDNlYnVzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjkwOlx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxMC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEyLVx0XHRcdFx0ICAgIGludCBuZXdfbXR1KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEzLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxNDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxNS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjAtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjE6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyMi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzI1LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzYSwgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjctXHRcdFx0XHQgICAgICBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMzMtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBkc2FfbG9vcF9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzU6XHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBkc2FfbG9vcF9nZXRfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzY6XHQuc2V0dXBcdFx0XHQ9IGRzYV9sb29wX3NldHVwLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM3Olx0LnRlYXJkb3duXHRcdD0gZHNhX2xvb3BfdGVhcmRvd24sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzg6XHQuZ2V0X3N0cmluZ3NcdFx0PSBkc2FfbG9vcF9nZXRfc3RyaW5ncyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzOTpcdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MDpcdC5nZXRfc3NldF9jb3VudFx0XHQ9IGRzYV9sb29wX2dldF9zc2V0X2NvdW50LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQxOlx0LmdldF9ldGh0b29sX3BoeV9zdGF0c1x0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MjpcdC5waHlfcmVhZFx0XHQ9IGRzYV9sb29wX3BoeV9yZWFkLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQzOlx0LnBoeV93cml0ZVx0XHQ9IGRzYV9sb29wX3BoeV93cml0ZSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NDpcdC5wb3J0X2JyaWRnZV9qb2luXHQ9IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDU6XHQucG9ydF9icmlkZ2VfbGVhdmVcdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2VfbGVhdmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDY6XHQucG9ydF9zdHBfc3RhdGVfc2V0XHQ9IGRzYV9sb29wX3BvcnRfc3RwX3N0YXRlX3NldCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NzpcdC5wb3J0X3ZsYW5fZmlsdGVyaW5nXHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9maWx0ZXJpbmcsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDg6XHQucG9ydF92bGFuX2FkZFx0XHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDk6XHQucG9ydF92bGFuX2RlbFx0XHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTA6XHQucG9ydF9jaGFuZ2VfbXR1XHQ9IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MTpcdC5wb3J0X21heF9tdHVcdFx0PSBkc2FfbG9vcF9wb3J0X21heF9tdHUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTI6XHQucGh5bGlua19nZXRfY2Fwc1x0PSBkc2FfbG9vcF9waHlsaW5rX2dldF9jYXBzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzUzLX07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTU6c3RhdGljIGludCBkc2FfbG9vcF9kcnZfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NzpcdHN0cnVjdCBkc2FfbG9vcF9wZGF0YSAqcGRhdGEgPSBtZGlvZGV2LVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU4Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU5LVx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Mi1cdGRzLVx1MDAzZWRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzgzOlx0ZHMtXHUwMDNlb3BzID0gXHUwMDI2ZHNhX2xvb3BfZHJpdmVyO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVx0ZHMtXHUwMDNlcHJpdiA9IHBzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM5NzpzdGF0aWMgdm9pZCBkc2FfbG9vcF9kcnZfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OC17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTktXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDAwOlx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDAxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQxMTpzdGF0aWMgdm9pZCBkc2FfbG9vcF9kcnZfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDEyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MjM6c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBkc2FfbG9vcF9kcnYgPSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjQtXHQubWRpb2Rydi5kcml2ZXJcdD0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyNi1cdH0sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjc6XHQucHJvYmVcdD0gZHNhX2xvb3BfZHJ2X3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI4Olx0LnJlbW92ZVx0PSBkc2FfbG9vcF9kcnZfcmVtb3ZlLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI5Olx0LnNodXRkb3duID0gZHNhX2xvb3BfZHJ2X3NodXRkb3duLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDMwLX07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzI6c3RhdGljIGludCBkc2FfbG9vcF9idXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDMzLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM1Olx0cmV0dXJuIGRydiA9PSBcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzYtfVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM3LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM4OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3Rlcih2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDY6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KHZvaWQpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDcte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ4Olx0c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9wZGF0YSBkc2FfbG9vcF9wZGF0YSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0OS1cdFx0LmNkID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MTpcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MjpcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXHUwMDI2ZHNhX2xvb3BfcGRhdGE7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NzMtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDgxLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDgyOnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4My17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDg2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3Olx0cmV0ID0gZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5My1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcdHJldCA9IG1kaW9fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmRzYV9sb29wX2Rydik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTY6XHRcdGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3RlcigpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDk3LVx0XHRtZGlvX2RldmljZV9yZW1vdmUoc3dpdGNoX21kaW9kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwMi19XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDM6bW9kdWxlX2luaXQoZHNhX2xvb3BfaW5pdCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDU6c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNi17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDc6XHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmRzYV9sb29wX2Rydik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDg6XHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwOS1cdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTExLX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUxMjptb2R1bGVfZXhpdChkc2FfbG9vcF9leGl0KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTMxOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERTQSBUYWcgUHJvdG9jb2wgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgRFNBIHRhZyBwcm90b2NvbHMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGlua2luZyBhYm91dCB0aGUgYGRzYV9sb29wYCBkcml2ZXIuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgZHNhX2xvb3BgIHVzZXMgYGRzYV9sb29wX2dldF9wcm90b2NvbGAsIHdoaWNoIHNlZW1zIHRvIGFsd2F5cyByZXR1cm4gYERTQV9UQUdfUFJPVE9fTk9ORWAuIFRoYXQmIzM5O3MgYSBiaXQgbGltaXRpbmcsIGlzbiYjMzk7dCBpdD8KCk15IG5leHQgdGhvdWdodCBpcywgY2FuIHdlIHNvbWVob3cgb3ZlcnJpZGUgdGhpcz8gQ2FuIHdlIG1hbmlwdWxhdGUgdGhlIHRhZyBwcm90b2NvbCB2aWEgZGV2bGluayBvciBzeXNmcz8gQnV0IHdhaXQsIGxvb2tpbmcgY2xvc2VyIGF0IHRoZSBjb2RlIGZvciBgZHNhX2xvb3BfZ2V0X3Byb3RvY29sYCwgaXQmIzM5O3MgaGFyZGNvZGVkIHRvIHJldHVybiBgRFNBX1RBR19QUk9UT19OT05FYC4gVGhhdCYjMzk7cyBhIGRlYWQgZW5kIHRoZXJlLgoKU28sIGlmIGBkc2FfbG9vcGAgaXNuJiMzOTt0IGdvaW5nIHRvIGJlIGhlbHBmdWwgZGlyZWN0bHksIHdoYXQgKm90aGVyKiBhdmVudWVzIGFyZSB0aGVyZSBmb3IgdGVzdGluZyBEU0EgdGFnZ2Vycz8gSSByZW1lbWJlciBgZHNhX2xvb3BfYmRpbmZvLmNgIHJlZ2lzdGVycyB0aG9zZSBmaXhlZCBQSFlzLiBBbnl0aGluZyB0aGVyZT8gIE1vcmUgZ2VuZXJhbGx5LCBpcyB0aGVyZSAqYW55KiBvdGhlciBkcml2ZXIgaW4gdGhlIERTQSBlY29zeXN0ZW0gdGhhdCBnaXZlcyB5b3UgdGhlIGFiaWxpdHkgdG8gKnNldCogdGhlIERTQSB0YWcgcHJvdG9jb2wsIG9yIGR5bmFtaWNhbGx5IGNoYW5nZSBpdD8KCk9rYXksIGJhY2sgdG8gYGRzYV9sb29wYC4gQ2FuIEkgY29uZmlndXJlIGl0IHRvIGJlIHNvbWV0aGluZyAqb3RoZXIqIHRoYW4gYERTQV9UQUdfUFJPVE9fTk9ORWA/IEl0IGtlZXBzIGNvbWluZyBiYWNrIHRvIHRoZSBmYWN0IHRoYXQgaXQgcmV0dXJucyBgRFNBX1RBR19QUk9UT19OT05FYC4gIFNvLCBob3cgY2FuIEkgZXZlbiBleHBsb3JlIHRoZSBgRFNBX1RBR19QUk9UT19ZVDkyMlhgIHRhZ2dlcj8gQWgsIHRoZSBgeXQ5MjJ4X25ldGRldl9vcHNgIGFyZSByZWdpc3RlcmVkIHZpYSBgRFNBX1RBR19EUklWRVJgLiBTbywgY2FuIEkgZHluYW1pY2FsbHkgKmNoYW5nZSogdGhlIHRhZyBwcm90b2NvbCBvZiBhIERTQSBzd2l0Y2g/IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgc3lzZnMgb3IgTmV0bGluay4gU3VyZWx5IHRoZXJlIGlzIHNvbWUgbWV0aG9kIGxpa2UgYGRzYV9zd2l0Y2hfc2V0X3RhZ19wcm90b2NvbGAgc29tZXdoZXJlLiBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24sIGlzbiYjMzk7dCBpdD8gTGV0IG1lIGxvb2sgZm9yIGEgd2F5IHRvIGNoYW5nZSBpdCBkeW5hbWljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkc2FfdGFnX3Byb3RvY29sJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdD02MDY9U3dpdGNoIGNvbmZpZ3VyYXRpb25cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3QtNjA5LS0gYGBnZXRfdGFnX3Byb3RvY29sYGA6IHRoaXMgaXMgdG8gaW5kaWNhdGUgd2hhdCBraW5kIG9mIHRhZ2dpbmcgcHJvdG9jb2wgaXNcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdDo2MTA6ICBzdXBwb3J0ZWQsIHNob3VsZCBiZSBhIHZhbGlkIHZhbHVlIGZyb20gdGhlIGBgZHNhX3RhZ19wcm90b2NvbGBgIGVudW0uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3QtNjExLSAgVGhlIHJldHVybmVkIGluZm9ybWF0aW9uIGRvZXMgbm90IGhhdmUgdG8gYmUgc3RhdGljOyB0aGUgZHJpdmVyIGlzIHBhc3NlZCB0aGVcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYz0yNDc4PXN0YXRpYyBib29sIGI1M19jYW5fZW5hYmxlX2JyY21fdGFncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MjQ3OTpcdFx0XHRcdCAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHRhZ19wcm90b2NvbClcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTI0ODAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTI1MDMtXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzoyNTA0OmVudW0gZHNhX3RhZ19wcm90b2NvbCBiNTNfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MjUwNTpcdFx0XHRcdFx0ICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wcm90KVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMjUwNi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTEzMz1zdHJ1Y3QgYjUzX2RldmljZSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oLTE1NC1cdHUxNiBudW1fYXJsX2J1Y2tldHM7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2Lmg6MTU1Olx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHRhZ19wcm90b2NvbDtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC0xNTYtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTU0Nz1pbnQgYjUzX21pcnJvcl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtNTQ5LVx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oOjU1MDplbnVtIGRzYV90YWdfcHJvdG9jb2wgYjUzX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDo1NTE6XHRcdFx0XHRcdCAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcHJvdCk7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtNTUyLXZvaWQgYjUzX21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz05Nz1zdGF0aWMgaW50IGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMjQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMjU6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBkc2FfbG9vcF9nZXRfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVx0XHRcdFx0XHRcdCAgIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTI3Olx0XHRcdFx0XHRcdCAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEyOC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmM9MjI3PXN0YXRpYyB2b2lkIGhlbGxjcmVla19mZWF0dXJlX2RldGVjdChzdHJ1Y3QgaGVsbGNyZWVrICpoZWxsY3JlZWspXG4tLVxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmMtMjM5LVxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmM6MjQwOnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgaGVsbGNyZWVrX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmMtMjQxLVx0XHRcdFx0XHRcdFx0aW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvaGlyc2NobWFubi9oZWxsY3JlZWsuYzoyNDI6XHRcdFx0XHRcdFx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2EvaGlyc2NobWFubi9oZWxsY3JlZWsuYy0yNDMte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9rczg5OTUuYz01MzA9c3RhdGljIGVudW1cbmRyaXZlcnMvbmV0L2RzYS9rczg5OTUuYzo1MzE6ZHNhX3RhZ19wcm90b2NvbCBrczg5OTVfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2Eva3M4OTk1LmMtNTMyLVx0XHRcdFx0XHQgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2Eva3M4OTk1LmM6NTMzOlx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxuZHJpdmVycy9uZXQvZHNhL2tzODk5NS5jLTUzNC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jPTg2Nz1zdGF0aWMgaW50IGxhbjkzMDNfY2hlY2tfZGV2aWNlKHN0cnVjdCBsYW45MzAzICpjaGlwKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy05MzYtXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6OTM3OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbGFuOTMwM19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy05MzgtXHRcdFx0XHRcdFx0ICAgICAgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6OTM5Olx0XHRcdFx0XHRcdCAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy05NDAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwLmg9MjU1PXN0cnVjdCBnc3dpcF9od19pbmZvIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcC5oLTI2Mi1cdHNpemVfdCBwY2VfbWljcm9jb2RlX3NpemU7XG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcC5oOjI2MzpcdGVudW0gZHNhX3RhZ19wcm90b2NvbCB0YWdfcHJvdG9jb2w7XG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcC5oLTI2NC1cdHZvaWQgKCpwaHlsaW5rX2dldF9jYXBzKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jPTc0Mj1zdGF0aWMgdm9pZCBnc3dpcF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtNzQ4LVxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM6NzQ5OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgZ3N3aXBfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy03NTAtXHRcdFx0XHRcdFx0ICAgIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM6NzUxOlx0XHRcdFx0XHRcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy03NTIte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTI5NzA9c3RhdGljIGludCBrc3o4X3N3aXRjaF9pbml0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk3OC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5Nzk6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBrc3o4NDYzX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk4MC1cdFx0XHRcdFx0XHQgICAgICBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5ODE6XHRcdFx0XHRcdFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk4Mi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9Mjk4Nj1zdGF0aWMgaW50IGtzejg0NjNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6Mjk4NzpcdFx0XHRcdFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk4OC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk5OS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMDA6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBrc3o4N3h4X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAwMS1cdFx0XHRcdFx0XHQgICAgICBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMDI6XHRcdFx0XHRcdFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAwMy17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzAwNz1zdGF0aWMgaW50IGtzejg3eHhfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzAwODpcdFx0XHRcdFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAwOS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAxNS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMTY6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBrc3o4OHh4X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAxNy1cdFx0XHRcdFx0XHQgICAgICBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMTg6XHRcdFx0XHRcdFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAxOS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzAyOD1zdGF0aWMgaW50IGtzejg4eHhfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzAyOTpcdFx0XHRcdFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAzMC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9MTk3MD1zdGF0aWMgaW50IGtzejk0Nzdfc3dpdGNoX2luaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0xOTg5LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM6MTk5MDpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGtzejk0NzdfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0xOTkxLVx0XHRcdFx0XHRcdCAgICAgIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM6MTk5MjpcdFx0XHRcdFx0XHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0xOTkzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYz0yMDA0PXN0YXRpYyBpbnQga3N6OTQ3N19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzoyMDA1Olx0XHRcdFx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0yMDA2LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jPTc2OD1zdGF0aWMgaW50IGxhbjkzN3hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtOTA3LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYzo5MDg6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBsYW45Mzd4X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy05MDktXHRcdFx0XHRcdFx0ICAgICAgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jOjkxMDpcdFx0XHRcdFx0XHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTkxMS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz05MTU9c3RhdGljIGludCBsYW45Mzd4X2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6OTE2Olx0XHRcdFx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTkxNy17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTIxNDY9c3RhdGljIHZvaWQgbXQ3NTN4X3BvcnRfbWlycm9yX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTY4LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjIxNjk6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIxNzAtbXRrX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyMTcxOlx0XHQgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTcyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2MDYwLmM9Mjc9c3RhdGljIGNvbnN0IGNoYXIgKm12ODhlNjA2MF9nZXRfbmFtZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgc3dfYWRkcilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2MDYwLmMtNDQtXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2MDYwLmM6NDU6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtdjg4ZTYwNjBfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2MDYwLmMtNDYtXHRcdFx0XHRcdFx0XHRpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTYwNjAuYzo0NzpcdFx0XHRcdFx0XHRcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBtKVxuZHJpdmVycy9uZXQvZHNhL212ODhlNjA2MC5jLTQ4LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz02NjI3PXN0YXRpYyBzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKm12ODhlNnh4eF9hbGxvY19jaGlwKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjQ1LVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6NjY0NjpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIG12ODhlNnh4eF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTY2NDctXHRcdFx0XHRcdFx0XHRpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjY2NDg6XHRcdFx0XHRcdFx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTY2NDkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTY2NTU9c3RhdGljIGludCBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzo2NjU2Olx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNjY1Ny17XG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjU4LVx0c3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjY2NTk6XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgb2xkX3Byb3RvY29sO1xuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNjY2MC1cdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5oPTM0OT1zdHJ1Y3QgbXY4OGU2eHh4X2NoaXAge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5oLTM1Mi1cdC8qIEN1cnJlbnRseSBjb25maWd1cmVkIHRhZ2dpbmcgcHJvdG9jb2wgKi9cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5oOjM1MzpcdGVudW0gZHNhX3RhZ19wcm90b2NvbCB0YWdfcHJvdG9jb2w7XG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuaC0zNTQtXG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM9MTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXhsODYyeHhfZXZsYW5fcnVsZV9kZXNjIHZpZF9hY2NlcHRfZWdyZXNzX3VuYXdhcmVbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0xNjMtXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoxNjQ6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBteGw4NjJ4eF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTE2NS1cdFx0XHRcdFx0XHQgICAgICAgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoxNjY6XHRcdFx0XHRcdFx0ICAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtKVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMTY3LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz01Mj1zdGF0aWMgdm9pZCBuZXRjX2Rlc3Ryb3lfdmxhbl9saXN0KHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy02MC1cbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jOjYxOnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTYyLW5ldGNfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6NjM6XHRcdCAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcHJvdClcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTY0LXtcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9NzU0PXN0YXRpYyBpbnQgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6NzU1Olx0XHRcdFx0ICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtNzU2LXtcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtODAwLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjgwMTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGZlbGl4X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTgwMi1cdFx0XHRcdFx0XHQgICAgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6ODAzOlx0XHRcdFx0XHRcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtODA0LXtcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9MTY3OD1zdGF0aWMgaW50IGZlbGl4X2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzoxNjc5Olx0XHRcdFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTE2ODAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz0yMzkwPWludCBmZWxpeF9yZWdpc3Rlcl9zd2l0Y2goc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgc3dpdGNoX2Jhc2UsXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzOTItXHRcdFx0ICBib29sIG1tX3N1cHBvcnRlZCxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzoyMzkzOlx0XHRcdCAgZW51bSBkc2FfdGFnX3Byb3RvY29sIGluaXRfdGFnX3Byb3RvLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzOTQtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmVsaXhfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4Lmg9ODc9c3RydWN0IGZlbGl4IHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmgtOTMtXHRyZXNvdXJjZV9zaXplX3RcdFx0XHRzd2l0Y2hfYmFzZTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguaDo5NDpcdGVudW0gZHNhX3RhZ19wcm90b2NvbFx0XHR0YWdfcHJvdG87XG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmgtOTUtXHRjb25zdCBzdHJ1Y3QgZmVsaXhfdGFnX3Byb3RvX29wcyAqdGFnX3Byb3RvX29wcztcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4Lmg9MTAxPWludCBmZWxpeF9yZWdpc3Rlcl9zd2l0Y2goc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgc3dpdGNoX2Jhc2UsXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5oLTEwMy1cdFx0XHQgIGJvb2wgbW1fc3VwcG9ydGVkLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5oOjEwNDpcdFx0XHQgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBpbml0X3RhZ19wcm90byxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguaC0xMDUtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmVsaXhfaW5mbyAqaW5mbyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYz00ODU9c3RhdGljIHZvaWQgYXI5MzMxX3N3X3BvcnRfZGlzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtNDk1LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzo0OTY6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBhcjkzMzFfc3dfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTQ5Ny1cdFx0XHRcdFx0XHRcdGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzo0OTg6XHRcdFx0XHRcdFx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtNDk5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xNzM5PXN0YXRpYyB1MzIgcWNhOGtfZ2V0X3BoeV9mbGFncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE3NTQtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNzU1OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE3NTYtcWNhOGtfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTc1NzpcdFx0ICAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE3NTgte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTE3ODI9c3RhdGljIGludCBxY2E4a19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNzgzOlx0XHRcdFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTc4NC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYz0xMDQ0PXJ0bDgzNjVtYl9nZXRfcG9ydF9leHRpbnQoc3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdiwgaW50IHBvcnQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0xMDYyLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYzoxMDYzOnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMTA2NC1ydGw4MzY1bWJfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYzoxMDY1Olx0XHRcdCAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMTA2Ni17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYz0yOTIwPXN0YXRpYyBpbnQgcnRsODM2NW1iX2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYzoyOTIxOlx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0yOTIyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYz04NjY9c3RhdGljIGludCBydGw4MzY2cmJfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjZyYi5jLTExMjktXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYzoxMTMwOnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcnRsODM2Nl9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjZyYi5jLTExMzEtXHRcdFx0XHRcdFx0ICAgICAgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYzoxMTMyOlx0XHRcdFx0XHRcdCAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjZyYi5jLTExMzMte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM9ODE9c3RhdGljIHZvaWQgYTVwc3dfcmVnX3JtdyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBpbnQgb2Zmc2V0LCB1MzIgbWFzaywgdTMyIHZhbClcbi0tXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTk0LVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzo5NTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGE1cHN3X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy05Ni1cdFx0XHRcdFx0XHQgICAgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jOjk3Olx0XHRcdFx0XHRcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTk4LXtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg9MTE1PXN0cnVjdCBzamExMTA1X2luZm8ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0xMzYtXHRib29sIGZpeGVkX2Nic19tYXBwaW5nO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oOjEzNzpcdGVudW0gZHNhX3RhZ19wcm90b2NvbCB0YWdfcHJvdG87XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMTM4LVx0Y29uc3Qgc3RydWN0IHNqYTExMDVfZHluYW1pY190YWJsZV9vcHMgKmR5bl9vcHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM9MjI1OD1pbnQgc2phMTEwNV9zdGF0aWNfY29uZmlnX3JlbG9hZChzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTIzNTQtXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYzoyMzU1OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTIzNTYtc2phMTEwNV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYzoyMzU3Olx0XHRcdCBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0yMzU4LXtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0yNjkxPXN0YXRpYyBpbnQgc2phMTEwNV9jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYzoyNjkyOlx0XHRcdFx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0yNjkzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2Evdml0ZXNzZS12c2M3M3h4LWNvcmUuYz02NjI9c3RhdGljIGludCB2c2M3M3h4X3BoeV93cml0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwaHksIGludCByZWdudW0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL3ZpdGVzc2UtdnNjNzN4eC1jb3JlLmMtNjg1LVxuZHJpdmVycy9uZXQvZHNhL3ZpdGVzc2UtdnNjNzN4eC1jb3JlLmM6Njg2OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgdnNjNzN4eF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS92aXRlc3NlLXZzYzczeHgtY29yZS5jLTY4Ny1cdFx0XHRcdFx0XHQgICAgICBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS92aXRlc3NlLXZzYzczeHgtY29yZS5jOjY4ODpcdFx0XHRcdFx0XHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2Evdml0ZXNzZS12c2M3M3h4LWNvcmUuYy02ODkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS94cnM3MDB4L3hyczcwMHguYz0xODU9c3RhdGljIGludCB4cnM3MDB4X3NldHVwX3JlZ21hcF9yYW5nZShzdHJ1Y3QgeHJzNzAweCAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EveHJzNzAweC94cnM3MDB4LmMtMjI1LVxuZHJpdmVycy9uZXQvZHNhL3hyczcwMHgveHJzNzAweC5jOjIyNjpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIHhyczcwMHhfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EveHJzNzAweC94cnM3MDB4LmMtMjI3LVx0XHRcdFx0XHRcdCAgICAgIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL3hyczcwMHgveHJzNzAweC5jOjIyODpcdFx0XHRcdFx0XHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcbmRyaXZlcnMvbmV0L2RzYS94cnM3MDB4L3hyczcwMHguYy0yMjkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz00MjgwPXN0YXRpYyBpbnQgeXQ5MjF4X3BvcnRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbi0tXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNDMyMC1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYzo0MzIxOnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy00MzIyLXl0OTIxeF9kc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjQzMjM6XHRcdFx0ICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtKVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTQzMjQte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz01MzgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHl0OTIyeF9waHlsaW5rX21hY19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTUzODYtXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM6NTM4NzpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNTM4OC15dDkyMnhfZHNhX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYzo1Mzg5Olx0XHRcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy01MzkwLXtcbi0tXG5pbmNsdWRlL25ldC9kc2EuaD0yNj1zdHJ1Y3QgdGNfYWN0aW9uO1xuLS1cbmluY2x1ZGUvbmV0L2RzYS5oLTY0LVxuaW5jbHVkZS9uZXQvZHNhLmg6NjU6ZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcbmluY2x1ZGUvbmV0L2RzYS5oLTY2LVx0RFNBX1RBR19QUk9UT19OT05FXHRcdD0gRFNBX1RBR19QUk9UT19OT05FX1ZBTFVFLFxuLS1cbmluY2x1ZGUvbmV0L2RzYS5oPTEwNj1zdHJ1Y3QgZHNhX2RldmljZV9vcHMge1xuLS1cbmluY2x1ZGUvbmV0L2RzYS5oLTExNS1cdGNvbnN0IGNoYXIgKm5hbWU7XG5pbmNsdWRlL25ldC9kc2EuaDoxMTY6XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG87XG5pbmNsdWRlL25ldC9kc2EuaC0xMTctXHQvKiBTb21lIHRhZ2dpbmcgcHJvdG9jb2xzIGVpdGhlciBtYW5nbGUgb3Igc2hpZnQgdGhlIGRlc3RpbmF0aW9uIE1BQ1xuLS1cbmluY2x1ZGUvbmV0L2RzYS5oPTEzMz1zdHJ1Y3QgZHNhX3N3aXRjaF90cmVlIHtcbi0tXG5pbmNsdWRlL25ldC9kc2EuaC0xNTgtXHQgKi9cbmluY2x1ZGUvbmV0L2RzYS5oOjE1OTpcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBkZWZhdWx0X3Byb3RvO1xuaW5jbHVkZS9uZXQvZHNhLmgtMTYwLVxuLS1cbmluY2x1ZGUvbmV0L2RzYS5oPTg2ND1zdHJ1Y3QgZHNhX3N3aXRjaF9vcHMge1xuLS1cbmluY2x1ZGUvbmV0L2RzYS5oLTg3MS1cdCAqL1xuaW5jbHVkZS9uZXQvZHNhLmg6ODcyOlx0ZW51bSBkc2FfdGFnX3Byb3RvY29sICgqZ2V0X3RhZ19wcm90b2NvbCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuaW5jbHVkZS9uZXQvZHNhLmgtODczLVx0XHRcdFx0XHRcdCAgaW50IHBvcnQsXG5pbmNsdWRlL25ldC9kc2EuaDo4NzQ6XHRcdFx0XHRcdFx0ICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXByb3QpO1xuaW5jbHVkZS9uZXQvZHNhLmgtODc1LVx0aW50XHQoKmNoYW5nZV90YWdfcHJvdG9jb2wpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmluY2x1ZGUvbmV0L2RzYS5oOjg3NjpcdFx0XHRcdCAgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pO1xuaW5jbHVkZS9uZXQvZHNhLmgtODc3LVx0Lypcbi0tXG5pbmNsdWRlL25ldC9kc2EuaC04ODItXHRpbnRcdCgqY29ubmVjdF90YWdfcHJvdG9jb2wpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmluY2x1ZGUvbmV0L2RzYS5oOjg4MzpcdFx0XHRcdFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKTtcbmluY2x1ZGUvbmV0L2RzYS5oLTg4NC1cbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz0zNDA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zaG93KHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbm5ldC9kc2EvY29uZHVpdC5jLTM0Ni1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXNcXG5cJiMzNDssXG5uZXQvZHNhL2NvbmR1aXQuYzozNDc6XHRcdCAgICAgICBkc2FfdGFnX3Byb3RvY29sX3RvX3N0cihjcHVfZHAtXHUwMDNldGFnX29wcykpO1xubmV0L2RzYS9jb25kdWl0LmMtMzQ4LX1cbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz00MTk9aW50IGRzYV9jb25kdWl0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwKVxuLS1cbm5ldC9kc2EvY29uZHVpdC5jLTQyNS1cbm5ldC9kc2EvY29uZHVpdC5jOjQyNjpcdG10dSA9IEVUSF9EQVRBX0xFTiAmIzQzOyBkc2FfdGFnX3Byb3RvY29sX292ZXJoZWFkKHRhZ19vcHMpO1xubmV0L2RzYS9jb25kdWl0LmMtNDI3LVxuLS1cbm5ldC9kc2EvZHNhLmM9MTEyMj1zdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX2RzYShzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxuLS1cbm5ldC9kc2EvZHNhLmMtMTEyOC1cbm5ldC9kc2EvZHNhLmM6MTEyOTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2FfcG9ydCAqZHAsXG5uZXQvZHNhL2RzYS5jLTExMzAtXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdClcbm5ldC9kc2EvZHNhLmMtMTEzMS17XG5uZXQvZHNhL2RzYS5jOjExMzI6XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgdGFnX3Byb3RvY29sID0gRFNBX1RBR19QUk9UT19OT05FO1xubmV0L2RzYS9kc2EuYy0xMTMzLVx0c3RydWN0IGRzYV9zd2l0Y2ggKm1kcywgKmRzID0gZHAtXHUwMDNlZHM7XG4tLVxubmV0L2RzYS9kc2EuYz0xMTU1PXN0YXRpYyBpbnQgZHNhX3BvcnRfcGFyc2VfY3B1KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxuLS1cbm5ldC9kc2EvZHNhLmMtMTE2MC1cdHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRzLVx1MDAzZWRzdDtcbm5ldC9kc2EvZHNhLmM6MTE2MTpcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBkZWZhdWx0X3Byb3RvO1xubmV0L2RzYS9kc2EuYy0xMTYyLVxuLS1cbm5ldC9kc2EvdGFnLmM9MTY4PUVYUE9SVF9TWU1CT0xfR1BMKGRzYV90YWdfZHJpdmVyc191bnJlZ2lzdGVyKTtcbm5ldC9kc2EvdGFnLmMtMTY5LVxubmV0L2RzYS90YWcuYzoxNzA6Y29uc3QgY2hhciAqZHNhX3RhZ19wcm90b2NvbF90b19zdHIoY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzICpvcHMpXG5uZXQvZHNhL3RhZy5jLTE3MS17XG4tLVxubmV0L2RzYS90YWcuaD0yND12b2lkIGRzYV90YWdfZHJpdmVyX3B1dChjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgKm9wcyk7XG5uZXQvZHNhL3RhZy5oOjI1OmNvbnN0IGNoYXIgKmRzYV90YWdfcHJvdG9jb2xfdG9fc3RyKGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyAqb3BzKTtcbm5ldC9kc2EvdGFnLmgtMjYtXG5uZXQvZHNhL3RhZy5oOjI3OnN0YXRpYyBpbmxpbmUgaW50IGRzYV90YWdfcHJvdG9jb2xfb3ZlcmhlYWQoY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzICpvcHMpXG5uZXQvZHNhL3RhZy5oLTI4LXtcbi0tXG5uZXQvZHNhL3VzZXIuYz0yMTAyPWludCBkc2FfdXNlcl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9kc2EvdXNlci5jLTIxNDEtXG5uZXQvZHNhL3VzZXIuYzoyMTQyOlx0b3ZlcmhlYWQgPSBkc2FfdGFnX3Byb3RvY29sX292ZXJoZWFkKGNwdV9kcC1cdTAwM2V0YWdfb3BzKTtcbm5ldC9kc2EvdXNlci5jLTIxNDMtXHRtdHVfbGltaXQgPSBtaW5fdChpbnQsIGNvbmR1aXQtXHUwMDNlbWF4X210dSwgZGV2LVx1MDAzZW1heF9tdHUgJiM0Mzsgb3ZlcmhlYWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NzcwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBDb25kdWl0IFRhZ2dpbmcgRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gcG9raW5nIGFyb3VuZCBpbiBgbmV0L2RzYS9jb25kdWl0LmNgIGFuZCBzZWUgdGhlc2UgZnVuY3Rpb25zLCBgdGFnZ2luZ19zaG93YCBhbmQgYHRhZ2dpbmdfc3RvcmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SG1tLCBzb3VuZHMgbGlrZSB0aGlzIG1pZ2h0IGJlIHdoZXJlIHRoZSBjb25kdWl0IHRhZ2dpbmcgY29uZmlndXJhdGlvbiBsaXZlcy4mIzM0OyBCdXQgSSBjYW4mIzM5O3QganVzdCBhc3N1bWUgYW55dGhpbmcsIHNvIEkgc2hvdWxkIHNlZSBpZiBgdGFnZ2luZ19zdG9yZWAgYWN0dWFsbHkgZXhpc3RzIGFzIGEgZnVuY3Rpb24uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgaXQmIzM5O3MgZGVmaW5lZCBiZWZvcmUgSSB0cnkgdG8gaW50ZXJwcmV0IHRoZSBjb250ZXh0LCBvciBiZWZvcmUgSSBnbyBwb2tpbmcgYXJvdW5kIGluIHRoZSBmdW5jdGlvbiYjMzk7cyBjb2RlLiBHb3R0YSBiZSBtZXRob2RpY2FsIGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFnZ2luZ19zdG9yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL2NvbmR1aXQuYz0zNDA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zaG93KHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbm5ldC9kc2EvY29uZHVpdC5jLTM0OS1cbm5ldC9kc2EvY29uZHVpdC5jOjM1MDpzdGF0aWMgc3NpemVfdCB0YWdnaW5nX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxubmV0L2RzYS9jb25kdWl0LmMtMzUxLVx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAxMDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIFRhZyBQcm90b2NvbDogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGR5bmFtaWNhbGx5IGNoYW5naW5nIHRoZSB0YWcgcHJvdG9jb2wgb2YgYSBEU0Egc3dpdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGBEU0FfVEFHX1BST1RPX1lUOTIyWGAgcHJvdG9jb2wsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdnVsbmVyYWJpbGl0eSBzcGFjZS4gSSBzZWUgdGhhdCB0aGUgYHRhZ2dpbmdfc3RvcmVgIHN5c2ZzIGVudHJ5IGluIGBuZXQvZHNhL2NvbmR1aXQuY2AgYWxsb3dzIGR5bmFtaWMgY2hhbmdlcywgd2hpY2ggaXMgZ3JlYXQsIGJ1dCBpdCYjMzk7cyBub3QgdGhlIGZ1bGwgc3RvcnkuIFRoaXMgZW50cnkgY2FsbHMgYGRzYV9zd2l0Y2hfY2hhbmdlX3RhZ19wcm90b2NvbGAsIHdoaWNoLCBpbiB0dXJuLCBjYWxscyBgZHMtJmd0O29wcy0mZ3Q7Y2hhbmdlX3RhZ19wcm90b2NvbGAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSWYgdGhlIHN3aXRjaCBkcml2ZXIgZG9lc24mIzM5O3QgaW1wbGVtZW50IGBjaGFuZ2VfdGFnX3Byb3RvY29sYCwgdGhlIGF0dGVtcHQgdG8gY2hhbmdlIHRoZSB0YWcgcHJvdG9jb2wgd2lsbCBmYWlsLgoKVGhlIGltbWVkaWF0ZSBwcm9ibGVtIGlzIHRoYXQgYGRzYV9sb29wYCwgd2hpY2ggaXMgYSBjb21tb25seSB1c2VkIG1vY2sgZHJpdmVyLCAqZG9lc24mIzM5O3QqIGltcGxlbWVudCBgY2hhbmdlX3RhZ19wcm90b2NvbGAuIFNvLCBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uIG9mIGl0cyBwcm90b2NvbCBpcyBvdXQuIE1vZGlmeWluZyB0aGUgYGRzYV9sb29wYCBkcml2ZXIgaXRzZWxmIGlzIGEgbm9uLXN0YXJ0ZXIuIEkgbmVlZCB0byBmaW5kIGFub3RoZXIgRFNBIHN3aXRjaCBkcml2ZXIgdGhhdCBJICpjYW4qIGFjdHVhbGx5IGluc3RhbnRpYXRlIHdpdGhpbiBteSB0ZXN0aW5nIGVudmlyb25tZW50LgoKSSYjMzk7bSB3b3JraW5nIGluIGEgc3RhbmRhcmQgeDg2XzY0IFFFTVUgZW52aXJvbm1lbnQsIG5vdCBzb21lIHNwZWNpYWxpemVkIGBzYW5kYm94YCBhcmNoaXRlY3R1cmUsIHdoaWNoIGxpbWl0cyBteSBvcHRpb25zLiBJJiMzOTttIGhpdHRpbmcgYSByb2FkYmxvY2suIENhbiBJIHNvbWVob3cgaW5zdGFudGlhdGUgYSBEU0Egc3dpdGNoIHRoYXQgKnVzZXMqIGBEU0FfVEFHX1BST1RPX1lUOTIyWGA/IFRoZSBkcml2ZXIgYXNzb2NpYXRlZCB3aXRoIHRoYXQgaXMgYHl0OTIxeC5jYCwgYSBkcml2ZXIgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1L1lUOTIyNCBzd2l0Y2ggY2hpcHMuIENydWNpYWxseSwgaXQmIzM5O3MgYW4gTURJTyBkZXZpY2UgZHJpdmVyLgoKQ2FuIEkgaW5zdGFudGlhdGUgYW4gTURJTyBkZXZpY2UgdmlhIHN5c2ZzPyBJIGtub3cgSTJDIGFuZCBTUEkgaGF2ZSBzb21lIG1lY2hhbmlzbXMsIGJ1dCBNRElPIGRvZXNuJiMzOTt0IHNlZW0gdG8gaGF2ZSBhIGdlbmVyaWMgYG5ld19kZXZpY2VgIGF0dHJpYnV0ZS4gSXMgdGhlcmUgYSBiYWNrZG9vcj8gSSByZWNhbGwgc29tZXRoaW5nIGFib3V0IGluamVjdGluZyBNRElPIGRldmljZXMgdXNpbmcgc29tZXRoaW5nIGxpa2UgYG1kaW8tbW9ja2Agb3IgYG1kaW8tZ3Bpb2AsIGJ1dCBzeXprYWxsZXIgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIGEgZGlyZWN0IG1lYW5zIHRvIGNyZWF0ZSBhcmJpdHJhcnkgTURJTyBkZXZpY2VzLCB1bmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBmdXp6ZXIgc2V0dXAuCgpUaGUgYGRzYV9sb29wYCBkcml2ZXIgaXMgaW5zdGFudGlhdGVkIHRocm91Z2ggYGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldmAsIHdoaWNoIHJlZ2lzdGVycyBhICpmaXhlZCogTURJTyBkZXZpY2UuIE5vIGx1Y2sgdGhlcmUuIFdoYXQgYWJvdXQgbG9hZGluZyB0aGUgYHl0OTJ4eF9tZGlvX2RyaXZlcmAgZGlyZWN0bHk/CgpMb29raW5nIGF0IHRoZSBkcml2ZXImIzM5O3MgZGV2aWNlIG1hdGNoIHRhYmxlOgpgYGBjCnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTJ4eF9vZl9tYXRjaFtdID0gewoJewoJCS5jb21wYXRpYmxlID0gJiMzNDttb3RvcmNvbW0seXQ5MjE1JiMzNDssCgkJLmRhdGEgPSAmYW1wO3l0OTJ4eF9jaGlwX2luZm9fdGFibGVbWVQ5MjE1XSwKCX0sCgl7CgkJLmNvbXBhdGlibGUgPSAmIzM0O21vdG9yY29tbSx5dDkyMjQmIzM0OywKCQkuZGF0YSA9ICZhbXA7eXQ5Mnh4X2NoaXBfaW5mb190YWJsZVtZVDkyMjRdLAoJfSwKCXt9Cn07CmBgYApUaGlzIGlzIGEgZGV2aWNlLXRyZWUgZHJpdmVuIGRyaXZlci4gV2l0aG91dCBEZXZpY2UgVHJlZSwgYG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpYCB3aWxsIHJldHVybiBOVUxMLCBhbmQgdGhlIHByb2JlIHdpbGwgZmFpbCB3aXRoIGAtRUlOVkFMYC4gVGhlIGRyaXZlciB1c2VzIHRoZSBmb2xsb3dpbmcgY29kZToKYGBgYwoJY29tcGF0X2luZm8gPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKCWlmICghY29tcGF0X2luZm8pCgkJcmV0dXJuIC1FSU5WQUw7CmBgYApFdmVuIGlmIEkgKmNvdWxkKiBzb21laG93IGJpbmQgdGhpcyBkcml2ZXIgdG8gYW4gTURJTyBkZXZpY2UgKHRocm91Z2gsIHNheSwgYSBgYmluZGAgc3lzZnMgb3BlcmF0aW9uKSwgaXQgd291bGQgZmFpbCBiZWNhdXNlIHRoZSBuZWNlc3NhcnkgYG9mX25vZGVgIHdpdGggdGhlIG1hdGNoaW5nIGNvbXBhdGlibGUgc3RyaW5nICgmIzM0O21vdG9yY29tbSx5dDkyMTUmIzM0OyBvciAmIzM0O21vdG9yY29tbSx5dDkyMjQmIzM0Oykgd291bGQgYmUgYWJzZW50IGluIG15IHN0YW5kYXJkIFFFTVUgc2V0dXAuIFRoZSBwcm9iZSAqd2lsbCogYWx3YXlzIGZhaWwgaW4gYSBub24tRGV2aWNlIFRyZWUgZW52aXJvbm1lbnQuCgpXaGF0IGlmIEkmIzM5O20gcnVubmluZyBzeXprYWxsZXIgb24gYW4gQVJNNjQgUUVNVSB3aXRoIGEgZGV2aWNlIHRyZWU/IFN5emthbGxlciAqZG9lcyogcnVuIG9uIEFSTTY0LCBidXQgaXQgZG9lc24mIzM5O3QgZHluYW1pY2FsbHkgZ2VuZXJhdGUgRFQgbm9kZXMgZm9yIGFyYml0cmFyeSBkcml2ZXJzLiBJdCB1c2VzIGEgZml4ZWQgRGV2aWNlIFRyZWUgcHJvdmlkZWQgd2l0aCB0aGUgc3l6a2FsbGVyIGltYWdlLiBTbywgdW5sZXNzIHRoZSBEZXZpY2UgVHJlZSBzcGVjaWZpY2FsbHkgaW5jbHVkZXMgZWl0aGVyICYjMzQ7bW90b3Jjb21tLHl0OTIxNSYjMzQ7IG9yICYjMzQ7bW90b3Jjb21tLHl0OTIyNCYjMzQ7IGVudHJpZXMsIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUsIHdoaWNoIGlzIGFsbW9zdCBjZXJ0YWlubHkgbm90IHRoZSBjYXNlIGZvciBnZW5lcmljIGltYWdlcy4gVW5mb3J0dW5hdGVseSwgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBgc3l6X2RldmxpbmtgIHBzZXVkby1zeXNjYWxsIHRoYXQgY291bGQgY3JlYXRlIGFuIE1ESU8gZGV2aWNlIGVpdGhlci4gRGV2bGluayBpcyBmb3IgZGV2bGluayBkZXZpY2VzIG9ubHkuCgpJIGhhdmUgdG8gY29uc2lkZXIgaWYgdGhlIHRhZyBkcml2ZXIsIHNwZWNpZmljYWxseSBgdGFnX3l0OTIxeC5jYCwgaXMgcmVhY2hhYmxlIGluIGFueSBvdGhlciB3YXkuIEl0JiMzOTtzIHJlZ2lzdGVyZWQgdmlhIGBtb2R1bGVfZHNhX3RhZ19kcml2ZXJzKGRzYV90YWdfZHJpdmVyX2FycmF5KWAgYW5kIHJlZ2lzdGVycyBgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuY2hhbmdlX3RhZ19wcm90b2NvbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz03MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXY4OGU2eHh4X3N3aXRjaF9vcHMgPSB7XG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy03MTg4LVx0LmdldF90YWdfcHJvdG9jb2xcdD0gbXY4OGU2eHh4X2dldF90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzo3MTg5Olx0LmNoYW5nZV90YWdfcHJvdG9jb2xcdD0gbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy03MTkwLVx0LnNldHVwXHRcdFx0PSBtdjg4ZTZ4eHhfc2V0dXAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTIzMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBmZWxpeF9zd2l0Y2hfb3BzID0ge1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzMDctXHQuZ2V0X3RhZ19wcm90b2NvbFx0XHQ9IGZlbGl4X2dldF90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6MjMwODpcdC5jaGFuZ2VfdGFnX3Byb3RvY29sXHRcdD0gZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0yMzA5LVx0LmNvbm5lY3RfdGFnX3Byb3RvY29sXHRcdD0gZmVsaXhfY29ubmVjdF90YWdfcHJvdG9jb2wsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYz0zMjg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgcnRsODM2NW1iX3N3aXRjaF9vcHMgPSB7XG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jLTMyODYtXHQuZ2V0X3RhZ19wcm90b2NvbCA9IHJ0bDgzNjVtYl9nZXRfdGFnX3Byb3RvY29sLFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYzozMjg3Olx0LmNoYW5nZV90YWdfcHJvdG9jb2wgPSBydGw4MzY1bWJfY2hhbmdlX3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMzI4OC1cdC5zZXR1cCA9IHJ0bDgzNjVtYl9zZXR1cCxcbi0tXG5uZXQvZHNhL2RzYS5jPTExNTU9c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV9jcHUoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4tLVxubmV0L2RzYS9kc2EuYy0xMjMwLVx0ICogZHNhX3N3aXRjaF9zZXR1cF90YWdfcHJvdG9jb2wgb25jZSAuc2V0dXAgaGFzIHJ1biBhbmQgdGhlXG5uZXQvZHNhL2RzYS5jOjEyMzE6XHQgKiBkcml2ZXIgaXMgcmVhZHkgdG8gYWNjZXB0IGNhbGxzIHRvIC5jaGFuZ2VfdGFnX3Byb3RvY29sLiBJZlxubmV0L2RzYS9kc2EuYy0xMjMyLVx0ICogdGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjdXN0b20gcHJvdG9jb2wgYXQgdGhhdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzAwNwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBjaGFuZ2VfdGFnX3Byb3RvY29sYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGRyaXZlcnMgdGhhdCBhY3R1YWxseSBoYW5kbGUgdGhlIGBjaGFuZ2VfdGFnX3Byb3RvY29sYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGBtdjg4ZTZ4eHhgLCBgZmVsaXhgLCBhbmQgYHJ0bDgzNjVtYmAgbGlzdGVkLiBNeSBmaXJzdCBxdWVzdGlvbiBpcywgY2FuIGFueSBvZiB0aGVzZSBiZSBlZmZlY3RpdmVseSB0ZXN0ZWQgb3IgZXhwZXJpbWVudGVkIHdpdGggaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50PyBJdCB3b3VsZCBtYWtlIGRlYnVnZ2luZyBhbmQgZGV2ZWxvcG1lbnQgYSBsb3QgZWFzaWVyLgoKTm93LCBJIHJlY2FsbCBgbXY4OGU2eHh4YCBpcyBhbiBNRElPIGRyaXZlci4gVGhhdCBmZWVscyBtYW5hZ2VhYmxlIGluIGEgdmlydHVhbCBzZXR1cCwgcG90ZW50aWFsbHkgdGhyb3VnaCBlbXVsYXRpb24gb2YgYW4gTURJTyBidXMuIEhvd2V2ZXIsIGBmZWxpeGDigKYgdGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBjYXNlLiBJIHZhZ3VlbHkgcmVtZW1iZXIgaXQgYmVpbmcgYSBQQ0kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBOWFAgVlNDOTk1OS4gQnV0IGhvbGQgb24sIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0LiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCAqaXMqIGEgUENJIGRyaXZlciB0byB1bmRlcnN0YW5kIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50IGltcGxpY2F0aW9ucy4gTGV0IG1lIHRha2UgYSBxdWljayBwZWVrIGF0IGBmZWxpeF92c2M5OTU5LmNgIGFuZCBjb25maXJtIG15IGFzc3VtcHRpb25zLiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBiZXN0IHRvIGRldmVsb3AgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmVsaXhfdnNjOTk1OSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2Evb2NlbG90L01ha2VmaWxlPTc9bXNjY19mZWxpeF9kc2FfbGliLW9ianMgOj0gZmVsaXgub1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9NYWtlZmlsZTo4Om1zY2NfZmVsaXgtb2JqcyA6PSBmZWxpeF92c2M5OTU5Lm9cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvTWFrZWZpbGUtOS1tc2NjX29jZWxvdF9leHQtb2JqcyA6PSBvY2Vsb3RfZXh0Lm9cbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0yNzQ1PU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBmZWxpeF9pZHMpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjc0Ni1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjI3NDc6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGZlbGl4X3ZzYzk5NTlfcGNpX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTI3NDgtXHQubmFtZVx0XHQ9IFwmIzM0O21zY2NfZmVsaXhcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjc1My19O1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6Mjc1NDptb2R1bGVfcGNpX2RyaXZlcihmZWxpeF92c2M5OTU5X3BjaV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjc1NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM3NzUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyBEcml2ZXIgQ29tcGF0aWJpbGl0eSBhbmQgUG90ZW50aWFsIFByb3RvY29sIE1hbmlwdWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGZlbGl4X3ZzYzk5NTlgLiBSaWdodCwgaXQgKmlzKiBhIFBDSSBkcml2ZXIsIGJ1dCB0aGUgcHJvYmxlbSBpcyBpdCYjMzk7cyB0aWVkIHNwZWNpZmljYWxseSB0byB0aGUgTlhQIFZTQzk5NTkgZGV2aWNlLCBhbmQgdGhhdCYjMzk7cyBub3Qgc29tZXRoaW5nIHlvdSYjMzk7bGwgZmluZCBlbXVsYXRlZCBpbiBhIHR5cGljYWwgUUVNVSBzZXR1cC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIHJvYWRibG9jay4gSG1t4oCmIHdoYXQgYWJvdXQgYHJ0bDgzNjVtYmA/IEl04oCZcyBhbiBNRElPIGRyaXZlciwgcG90ZW50aWFsbHkgb2ZmZXJpbmcgYSBkaWZmZXJlbnQgYXZlbnVlLgoKTm93LCBob2xkIG9uLiBBIHRob3VnaHQgaXMgZW1lcmdpbmcuIENhbiB3ZSBtYW5pcHVsYXRlIHRoZSB0YWdnaW5nIHByb3RvY29sIG9uIGEgc3dpdGNoPyBQZXJoYXBzLCBzb21laG93LCB3ZSBjb3VsZCBjaGFuZ2UgaXQgdG8gYW4gYXJiaXRyYXJ5IG9uZT8gVGhhdCBjb3VsZCBvcGVuIHNvbWUgaW50ZXJlc3RpbmcgZG9vcnMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gYGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2xgIHRvIHVuZGVyc3RhbmQgdGhpcyBkaXJlY3Rpb24gZnVydGhlci4gVGhhdCBtaWdodCBwcm92aWRlIHRoZSBhbnN3ZXIgSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9NzMyPWZlbGl4X3RhZ19wcm90b19zZXR1cF9zaGFyZWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy03NTMtICovXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6NzU0OnN0YXRpYyBpbnQgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtNzU1LVx0XHRcdFx0ICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTE2OTY9c3RhdGljIGludCBmZWxpeF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTE3NTEtXHQgKi9cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzoxNzUyOlx0ZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbChkcywgZmVsaXgtXHUwMDNldGFnX3Byb3RvKTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0xNzUzLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz0yMzA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZmVsaXhfc3dpdGNoX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0yMzA3LVx0LmdldF90YWdfcHJvdG9jb2xcdFx0PSBmZWxpeF9nZXRfdGFnX3Byb3RvY29sLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjIzMDg6XHQuY2hhbmdlX3RhZ19wcm90b2NvbFx0XHQ9IGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwOS1cdC5jb25uZWN0X3RhZ19wcm90b2NvbFx0XHQ9IGZlbGl4X2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDUyOAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbGAgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2xgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQmIzM5O3MgaXRzIGludGVuZGVkIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIEZlbGl4IGVjb3N5c3RlbT8gSXMgaXQgYSBjb3JlIGZ1bmN0aW9uLCBhIHV0aWxpdHksIG9yIHNvbWV0aGluZyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgdXNlIGNhc2Ugb3IgY29tcG9uZW50PyBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIGFuZCBjb250ZXh0LgoKR2l2ZW4gdGhlIG5hbWUsICYjMzQ7Y2hhbmdlX3RhZ19wcm90b2NvbCYjMzQ7LCBJJiMzOTttIGJldHRpbmcgdGhpcyBpcyByZWxhdGVkIHRvIGhvdyBGZWxpeCBoYW5kbGVzIHRhZ2dpbmcuIFBlcmhhcHMgaXQmIzM5O3MgaW52b2x2ZWQgaW4gbW9kaWZ5aW5nIHRoZSBwcm90b2NvbCB1c2VkIGZvciBjb21tdW5pY2F0aW9uIG9mIHRhZ3MgYmV0d2VlbiBlbmRwb2ludHMsIG9yIG1heWJlIGl0JiMzOTtzIHJlbGF0ZWQgdG8gaG93IHRhZ3MgdGhlbXNlbHZlcyBhcmUgZW5jb2RlZCBvciBpbnRlcnByZXRlZC4gVGhlIHRlcm0gJiMzNDtwcm90b2NvbCYjMzQ7IG1ha2VzIG1lIHRoaW5rIG9mIHVuZGVybHlpbmcgbmV0d29yayBjb21tdW5pY2F0aW9ucyBvciBzZXJpYWxpemF0aW9uIGZvcm1hdHMuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgaXMgYWJvdXQgc3dpdGNoaW5nIGJldHdlZW4gSVAgc2V0cywgSVAgdGFibGVzLCBlQlBGLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSBmb3IgdGFnIGVuZm9yY2VtZW50LgoKSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLCBhbnkgZG9jdW1lbnRhdGlvbiwgYW5kIGhvcGVmdWxseSwgcmVsZXZhbnQgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBpbiB0aGUgY29kZWJhc2UuIFVuZGVyc3RhbmRpbmcgdGhlIGlucHV0cyBhbmQgb3V0cHV0cywgYXMgd2VsbCBhcyBhbnkgc2lkZSBlZmZlY3RzLCB3aWxsIGJlIGNydWNpYWwuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcg4oCTIGhvdyBkb2VzIGl0IGRlYWwgd2l0aCBpbnZhbGlkIG9yIGNvbmZsaWN0aW5nIGlucHV0cz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byB3b3JyeSBhYm91dD8gRG9lcyB0aGlzIGZ1bmN0aW9uIGhhdmUgYW55IGltcGFjdCBvbiBkYXRhIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgZGlzdHJpYnV0ZWQgc3lzdGVtPwoKVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBncmFzcCB0aGUgY29yZSBsb2dpYyBvZiBgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbGAgYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIHN0YWJpbGl0eSBvZiB0aGUgRmVsaXggZGVwbG95bWVudC4gSSBleHBlY3QgYSBjYXJlZnVsIGluc3BlY3Rpb24gd2lsbCBiZSBuZWVkZWQgdG8gdHJ1bHkgdW5kZXJzdGFuZCBob3cgaXQgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzU0Olx0c3RhdGljIGludCBmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiA3NTU6XHRcdFx0XHRcdCAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuIDc1NjpcdHtcbiA3NTc6XHRcdGNvbnN0IHN0cnVjdCBmZWxpeF90YWdfcHJvdG9fb3BzICpvbGRfcHJvdG9fb3BzLCAqcHJvdG9fb3BzO1xuIDc1ODpcdFx0c3RydWN0IG9jZWxvdCAqb2NlbG90ID0gZHMtXHUwMDNlcHJpdjtcbiA3NTk6XHRcdHN0cnVjdCBmZWxpeCAqZmVsaXggPSBvY2Vsb3RfdG9fZmVsaXgob2NlbG90KTtcbiA3NjA6XHRcdGludCBlcnI7XG4gNzYxOlx0XG4gNzYyOlx0XHRzd2l0Y2ggKHByb3RvKSB7XG4gNzYzOlx0XHRjYXNlIERTQV9UQUdfUFJPVE9fU0VWSUxMRTpcbiA3NjQ6XHRcdGNhc2UgRFNBX1RBR19QUk9UT19PQ0VMT1Q6XG4gNzY1Olx0XHRcdHByb3RvX29wcyA9IFx1MDAyNmZlbGl4X3RhZ19ucGlfcHJvdG9fb3BzO1xuIDc2NjpcdFx0XHRicmVhaztcbiA3Njc6XHRcdGNhc2UgRFNBX1RBR19QUk9UT19PQ0VMT1RfODAyMVE6XG4gNzY4Olx0XHRcdHByb3RvX29wcyA9IFx1MDAyNmZlbGl4X3RhZ184MDIxcV9wcm90b19vcHM7XG4gNzY5Olx0XHRcdGJyZWFrO1xuIDc3MDpcdFx0ZGVmYXVsdDpcbiA3NzE6XHRcdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4gNzcyOlx0XHR9XG4gNzczOlx0XG4gNzc0Olx0XHRvbGRfcHJvdG9fb3BzID0gZmVsaXgtXHUwMDNldGFnX3Byb3RvX29wcztcbiA3NzU6XHRcbiA3NzY6XHRcdGlmIChwcm90b19vcHMgPT0gb2xkX3Byb3RvX29wcylcbiA3Nzc6XHRcdFx0cmV0dXJuIDA7XG4gNzc4Olx0XG4gNzc5Olx0XHRlcnIgPSBwcm90b19vcHMtXHUwMDNlc2V0dXAoZHMpO1xuIDc4MDpcdFx0aWYgKGVycilcbiA3ODE6XHRcdFx0Z290byBzZXR1cF9mYWlsZWQ7XG4gNzgyOlx0XG4gNzgzOlx0XHRlcnIgPSBmZWxpeF90YWdfcHJvdG9fc2V0dXBfc2hhcmVkKGRzLCBwcm90b19vcHMsIG9sZF9wcm90b19vcHMpO1xuIDc4NDpcdFx0aWYgKGVycilcbiA3ODU6XHRcdFx0Z290byBzZXR1cF9zaGFyZWRfZmFpbGVkO1xuIDc4NjpcdFxuIDc4NzpcdFx0aWYgKG9sZF9wcm90b19vcHMpXG4gNzg4Olx0XHRcdG9sZF9wcm90b19vcHMtXHUwMDNldGVhcmRvd24oZHMpO1xuIDc4OTpcdFxuIDc5MDpcdFx0ZmVsaXgtXHUwMDNldGFnX3Byb3RvX29wcyA9IHByb3RvX29wcztcbiA3OTE6XHRcdGZlbGl4LVx1MDAzZXRhZ19wcm90byA9IHByb3RvO1xuIDc5MjpcdFxuIDc5MzpcdFx0cmV0dXJuIDA7XG4gNzk0Olx0XG4gNzk1Olx0c2V0dXBfc2hhcmVkX2ZhaWxlZDpcbiA3OTY6XHRcdHByb3RvX29wcy1cdTAwM2V0ZWFyZG93bihkcyk7XG4gNzk3Olx0c2V0dXBfZmFpbGVkOlxuIDc5ODpcdFx0cmV0dXJuIGVycjtcbiA3OTk6XHR9XG4gODAwOlx0XG4gODAxOlx0c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBmZWxpeF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiA4MDI6XHRcdFx0XHRcdFx0XHQgICAgaW50IHBvcnQsXG4gODAzOlx0XHRcdFx0XHRcdFx0ICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU2NzUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipNeSBJbW1lZGlhdGUgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBhbmQgaXQmIzM5O3MgY2xlYXIgdGhlIHN5c3RlbSYjMzk7cyBjdXJyZW50IHN1cHBvcnQgaXMgcHJldHR5IGxpbWl0ZWQuIEl0IHNlZW1zIHRvIG9ubHkgcmVjb2duaXplIHRoZXNlIERTQSBwcm90b2NvbHM6IGBEU0FfVEFHX1BST1RPX1NFVklMTEVgLCBgRFNBX1RBR19QUk9UT19PQ0VMT1RgLCBhbmQgYERTQV9UQUdfUFJPVE9fT0NFTE9UXzgwMjFRYC4gVGhhdCYjMzk7cyBhIGRlY2VudCBzdGFydCwgYnV0IGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgSSBrbm93IHdlIG5lZWQgdG8gYWRkcmVzcy4gV2hhdCBhYm91dCBzdXBwb3J0IGZvciB0aGUgYG12ODhlNnh4eGAgZmFtaWx5PyBJdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiBtYW55IG9mIG91ciBhcHBsaWNhdGlvbnMuIEFyZSB3ZSBuZWdsZWN0aW5nIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZSwgb3IgaXMgdGhpcyBqdXN0IHRoZSBzdGFydGluZyBwb2ludD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhpcyBpcyBhbiBvdmVyc2lnaHQsIGEgZGVsaWJlcmF0ZSBjaG9pY2UsIG9yIGlmIHN1cHBvcnQgaXMgcGxhbm5lZCBmb3IgdGhpcyBicm9hZGVyIHJhbmdlIG9mIE1hcnZlbGwgc3dpdGNoZXMuIFRoaXMgZGV0YWlsIGlzIGNydWNpYWwgZm9yIGFzc2Vzc2luZyB0aGUgc3lzdGVtJiMzOTtzIHByYWN0aWNhbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjY1NTpcdHN0YXRpYyBpbnQgbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuNjY1NjpcdFx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuNjY1NzpcdHtcbjY2NTg6XHRcdHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcCA9IGRzLVx1MDAzZXByaXY7XG42NjU5Olx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgb2xkX3Byb3RvY29sO1xuNjY2MDpcdFx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHA7XG42NjYxOlx0XHRpbnQgZXJyO1xuNjY2MjpcdFxuNjY2MzpcdFx0c3dpdGNoIChwcm90bykge1xuNjY2NDpcdFx0Y2FzZSBEU0FfVEFHX1BST1RPX0VEU0E6XG42NjY1Olx0XHRcdHN3aXRjaCAoY2hpcC1cdTAwM2VpbmZvLVx1MDAzZWVkc2Ffc3VwcG9ydCkge1xuNjY2NjpcdFx0XHRjYXNlIE1WODhFNlhYWF9FRFNBX1VOU1VQUE9SVEVEOlxuNjY2NzpcdFx0XHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuNjY2ODpcdFx0XHRjYXNlIE1WODhFNlhYWF9FRFNBX1VORE9DVU1FTlRFRDpcbjY2Njk6XHRcdFx0XHRkZXZfd2FybihjaGlwLVx1MDAzZWRldiwgXCYjMzQ7UmVseWluZyBvbiB1bmRvY3VtZW50ZWQgRURTQSB0YWdnaW5nIGJlaGF2aW9yXFxuXCYjMzQ7KTtcbjY2NzA6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjY2NzE6XHRcdFx0Y2FzZSBNVjg4RTZYWFhfRURTQV9TVVBQT1JURUQ6XG42NjcyOlx0XHRcdFx0YnJlYWs7XG42NjczOlx0XHRcdH1cbjY2NzQ6XHRcdFx0YnJlYWs7XG42Njc1Olx0XHRjYXNlIERTQV9UQUdfUFJPVE9fRFNBOlxuNjY3NjpcdFx0XHRicmVhaztcbjY2Nzc6XHRcdGRlZmF1bHQ6XG42Njc4Olx0XHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuNjY3OTpcdFx0fVxuNjY4MDpcdFxuNjY4MTpcdFx0b2xkX3Byb3RvY29sID0gY2hpcC1cdTAwM2V0YWdfcHJvdG9jb2w7XG42NjgyOlx0XHRjaGlwLVx1MDAzZXRhZ19wcm90b2NvbCA9IHByb3RvO1xuNjY4MzpcdFxuNjY4NDpcdFx0bXY4OGU2eHh4X3JlZ19sb2NrKGNoaXApO1xuNjY4NTpcdFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChjcHVfZHAsIGRzKSB7XG42Njg2Olx0XHRcdGVyciA9IG12ODhlNnh4eF9zZXR1cF9wb3J0X21vZGUoY2hpcCwgY3B1X2RwLVx1MDAzZWluZGV4KTtcbjY2ODc6XHRcdFx0aWYgKGVycikge1xuNjY4ODpcdFx0XHRcdG12ODhlNnh4eF9yZWdfdW5sb2NrKGNoaXApO1xuNjY4OTpcdFx0XHRcdGdvdG8gdW53aW5kO1xuNjY5MDpcdFx0XHR9XG42NjkxOlx0XHR9XG42NjkyOlx0XHRtdjg4ZTZ4eHhfcmVnX3VubG9jayhjaGlwKTtcbjY2OTM6XHRcbjY2OTQ6XHRcdHJldHVybiAwO1xuNjY5NTpcdFxuNjY5NjpcdHVud2luZDpcbjY2OTc6XHRcdGNoaXAtXHUwMDNldGFnX3Byb3RvY29sID0gb2xkX3Byb3RvY29sO1xuNjY5ODpcdFxuNjY5OTpcdFx0bXY4OGU2eHh4X3JlZ19sb2NrKGNoaXApO1xuNjcwMDpcdFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydF9jb250aW51ZV9yZXZlcnNlKGNwdV9kcCwgZHMpXG42NzAxOlx0XHRcdG12ODhlNnh4eF9zZXR1cF9wb3J0X21vZGUoY2hpcCwgY3B1X2RwLVx1MDAzZWluZGV4KTtcbjY3MDI6XHRcdG12ODhlNnh4eF9yZWdfdW5sb2NrKGNoaXApO1xuNjcwMzpcdFxuNjcwNDpcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3NTcKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyBQcm90b2NvbCBTdXBwb3J0KioKCkFscmlnaHQsIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGNvZGUsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIG9ubHkgc2V0IHVwIHRvIGhhbmRsZSB0d28gc3BlY2lmaWMgRFNBIHByb3RvY29sIHRhZ3M6IGBEU0FfVEFHX1BST1RPX0VEU0FgIGFuZCBgRFNBX1RBR19QUk9UT19EU0FgLiBUaGF0JiMzOTtzIGEgYml0IGxpbWl0aW5nLCBpc24mIzM5O3QgaXQ/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFib3V0IG90aGVyIHJlbGV2YW50IGhhcmR3YXJlPyBTcGVjaWZpY2FsbHksIEkmIzM5O20gd29uZGVyaW5nIGFib3V0IHRoZSBgcnRsODM2NW1iYCBwcm90b2NvbCAtIGRvZXMgdGhpcyBjb2RlYmFzZSBuZWVkIHRvIGFjY29tbW9kYXRlIHRoYXQgb25lIGF0IGFsbD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBsaW1pdGVkIHN1cHBvcnQgaXMgaW50ZW50aW9uYWwsIGEgY29uc2Npb3VzIGRlc2lnbiBkZWNpc2lvbiwgb3IgaWYgaXQmIzM5O3MgYSBnYXAgdGhhdCBuZWVkcyB0byBiZSBhZGRyZXNzZWQuIFBlcmhhcHMgaXQgaXMgbm90IHJlbGV2YW50LCBidXQgSSBuZWVkIHRvIGFzayBteXNlbGYgd2hldGhlciB0aGUgc2NvcGUgb2YgcHJvdG9jb2xzIGlzIHByb3Blcmx5IGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjkyMDpcdHN0YXRpYyBpbnQgcnRsODM2NW1iX2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuMjkyMTpcdFx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuMjkyMjpcdHtcbjI5MjM6XHRcdHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuMjkyNDpcdFx0c3RydWN0IHJ0bDgzNjVtYl9jcHUgKmNwdTtcbjI5MjU6XHRcdHN0cnVjdCBydGw4MzY1bWIgKm1iO1xuMjkyNjpcdFxuMjkyNzpcdFx0bWIgPSBwcml2LVx1MDAzZWNoaXBfZGF0YTtcbjI5Mjg6XHRcdGNwdSA9IFx1MDAyNm1iLVx1MDAzZWNwdTtcbjI5Mjk6XHRcbjI5MzA6XHRcdHN3aXRjaCAocHJvdG8pIHtcbjI5MzE6XHRcdGNhc2UgRFNBX1RBR19QUk9UT19SVEw4XzQ6XG4yOTMyOlx0XHRcdGNwdS1cdTAwM2Vmb3JtYXQgPSBSVEw4MzY1TUJfQ1BVX0ZPUk1BVF84QllURVM7XG4yOTMzOlx0XHRcdGNwdS1cdTAwM2Vwb3NpdGlvbiA9IFJUTDgzNjVNQl9DUFVfUE9TX0FGVEVSX1NBO1xuMjkzNDpcdFx0XHRicmVhaztcbjI5MzU6XHRcdGNhc2UgRFNBX1RBR19QUk9UT19SVEw4XzRUOlxuMjkzNjpcdFx0XHRjcHUtXHUwMDNlZm9ybWF0ID0gUlRMODM2NU1CX0NQVV9GT1JNQVRfOEJZVEVTO1xuMjkzNzpcdFx0XHRjcHUtXHUwMDNlcG9zaXRpb24gPSBSVEw4MzY1TUJfQ1BVX1BPU19CRUZPUkVfQ1JDO1xuMjkzODpcdFx0XHRicmVhaztcbjI5Mzk6XHRcdC8qIFRoZSBzd2l0Y2ggYWxzbyBzdXBwb3J0cyBhIDQtYnl0ZSBmb3JtYXQsIHNpbWlsYXIgdG8gcnRsNGEgYnV0IHdpdGhcbjI5NDA6XHRcdCAqIHRoZSBzYW1lIDB4MDQgOC1iaXQgdmVyc2lvbiBhbmQgcHJvYmFibHkgOC1iaXQgcG9ydCBzb3VyY2UvZGVzdC5cbjI5NDE6XHRcdCAqIFRoZXJlIGlzIG5vIHB1YmxpYyBkb2MgYWJvdXQgaXQuIE5vdCBzdXBwb3J0ZWQgeWV0IGFuZCBpdCB3aWxsIHByb2JhYmx5XG4yOTQyOlx0XHQgKiBuZXZlciBiZS5cbjI5NDM6XHRcdCAqL1xuMjk0NDpcdFx0ZGVmYXVsdDpcbjI5NDU6XHRcdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4yOTQ2Olx0XHR9XG4yOTQ3Olx0XG4yOTQ4Olx0XHRyZXR1cm4gcnRsODM2NW1iX2NwdV9jb25maWcocHJpdik7XG4yOTQ5Olx0fVxuMjk1MDpcdFxuMjk1MTpcdHN0YXRpYyBpbnQgcnRsODM2NW1iX3N3aXRjaF9pbml0KHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG4yOTUyOlx0e1xuMjk1MzpcdFx0c3RydWN0IHJ0bDgzNjVtYiAqbWIgPSBwcml2LVx1MDAzZWNoaXBfZGF0YTtcbjI5NTQ6XHRcdGNvbnN0IHN0cnVjdCBydGw4MzY1bWJfY2hpcF9pbmZvICpjaTtcbjI5NTU6XHRcdGludCByZXQ7XG4yOTU2Olx0XHRpbnQgaTtcbjI5NTc6XHRcbjI5NTg6XHRcdGNpID0gbWItXHUwMDNlY2hpcF9pbmZvO1xuMjk1OTpcdFxuMjk2MDpcdFx0LyogRG8gYW55IGNoaXAtc3BlY2lmaWMgaW5pdCBqYW0gYmVmb3JlIGdldHRpbmcgdG8gdGhlIGNvbW1vbiBzdHVmZiAqL1xuMjk2MTpcdFx0aWYgKGNpLVx1MDAzZWphbV90YWJsZSkge1xuMjk2MjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjaS1cdTAwM2VqYW1fc2l6ZTsgaSYjNDM7JiM0MzspIHtcbjI5NjM6XHRcdFx0XHRyZXQgPSByZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VtYXAsIGNpLVx1MDAzZWphbV90YWJsZVtpXS5yZWcsXG4yOTY0Olx0XHRcdFx0XHRcdCAgIGNpLVx1MDAzZWphbV90YWJsZVtpXS52YWwpO1xuMjk2NTpcdFx0XHRcdGlmIChyZXQpXG4yOTY2Olx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuMjk2NzpcdFx0XHR9XG4yOTY4Olx0XHR9XG4yOTY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3ODIwCgkJCQkJCQlvdXRwdXQ6IDE2NAoJCQkJCQkJdGhvdWdodHM6IDExMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBhIFZlbmRvci1TcGVjaWZpYyBNRElPIFN3aXRjaCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGBEU0FfVEFHX1BST1RPX1lUOTIyWGAgcHJvdG9jb2wgaXMgYSBkZWFkIGVuZCBpbiB0aGUgY29udGV4dCBvZiBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbi4gSXQgb25seSBzdXBwb3J0cyBgRFNBX1RBR19QUk9UT19SVEw4XzRgIGFuZCBgRFNBX1RBR19QUk9UT19SVEw4XzRUYCwgc28gdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGR5bmFtaWNhbGx5IHN3aXRjaCBleGlzdGluZyBEU0Egc3dpdGNoIGRyaXZlcnMgdG8gdGhpcyBuZXcgcHJvdG9jb2wuCgpJIGNvbnNpZGVyZWQsIGNvdWxkIHdlIHNpbXBseSBsb2FkIHRoZSBgeXQ5MjF4YCBtb2R1bGU/IFRoZSBtb2R1bGUgYHRhZ195dDkyMXgua29gIHJlZ2lzdGVycyB0aGUgdGFnIGRyaXZlciwgYnV0IGl0cyBgeG1pdGAgYW5kIGByY3ZgIGZ1bmN0aW9ucyB3aWxsIG5ldmVyIGJlIGNhbGxlZC4gQmVjYXVzZSBubyBEU0Egc3dpdGNoIHVzZXMgdGhlIG5ldyBwcm90b2NvbC4gRnVydGhlcm1vcmUsIHRoZSBjb3JyZXNwb25kaW5nIGB5dDkyeHhfbWRpb19kcml2ZXJgIHdvbiYjMzk7dCBwcm9iZSBzaW5jZSB0aGVyZSYjMzk7cyBubyBtYXRjaGluZyBEZXZpY2UgVHJlZSBub2RlLiBUaGlzIHdob2xlIGJsb2NrIG9mIGNvZGUsIEkmIzM5O3ZlIGNvbmNsdWRlZCwgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgRFQgaW5qZWN0aW9uLCB3aGljaCBhcmVuJiMzOTt0IHN0YW5kYXJkLgoKSSByYW4gdGhyb3VnaCBhIGZldyBzY2VuYXJpb3MgaW4gbXkgbWluZC4gQ291bGQgYSB1c2VyIGNyZWF0ZSBhIGR1bW15IG5ldGRldmljZSBhbmQgc2V0IGl0cyBgZHNhX3B0cmA/IE5vLCB0aGUgRFNBIGNvcmUgbWFuYWdlcyB0aGlzLCByZXF1aXJpbmcgYSByZWdpc3RlcmVkIERTQSBzd2l0Y2guIERUIGluamVjdGlvbj8gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIG1lY2hhbmlzbSBmb3IgTURJTyBkZXZpY2VzIG9uIHg4Nl82NDsgYHN5el9kZXZsaW5rYCBpcyBkaWZmZXJlbnQgYW5kIHRoZSBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgIGNhbGwgaXMgZm9yIHBsYXRmb3JtIGRldmljZXMsIG5vdCBNRElPLgoKVGhlbiBJIGNvbnNpZGVyZWQgaWYgd2UgY291bGQgY2FsbCBgeXQ5Mnh4X21kaW9fcHJvYmVgIHZpYSBhIHBsYXRmb3JtIGRldmljZT8gTm8sIGl0JiMzOTtzIHJlZ2lzdGVyZWQgYXMgYW4gYG1kaW9fZHJpdmVyYCB3aGljaCByZXF1aXJlcyBhbiBNRElPIGJ1cyB0byBwcm9iZS4gRXZlbiBpZiB3ZSBjb3VsZCBjb25qdXJlIGFuIE1ESU8gZGV2aWNlLCBpdCBuZWVkcyBgb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldilgIHRvIG5vdCBiZSBOVUxMLCB3aGljaCBpcyB0byBzYXksIGl0IE1VU1QgaGF2ZSBhIERUIG5vZGUuIFNpbmNlIHg4Nl82NCBRRU1VIGRvZXNuJiMzOTt0IHVzZSBEZXZpY2UgVHJlZSwgaXQgdXNlcyBBQ1BJLCBzbyB0aGF0IGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIE5VTEwuIFRoZXJlJiMzOTtzIG5vIEFDUEkgbWF0Y2ggdGFibGUsIG9ubHkgYG9mX21hdGNoX3RhYmxlYC4gU28sIG9uIHg4Nl82NCwgdGhpcyBkcml2ZXIgd29uJiMzOTt0IHByb2JlLgoKSSByZW1lbWJlcmVkIHN5emthbGxlciBhbHNvIHJ1bnMgb24gQVJNNjQuIERvZXMgaXQgaW5qZWN0IERUIG5vZGVzIHRoZXJlPyBObywgaXQgdXNlcyBhIHN0YXRpYyBEVEIsIHNvIG5vIGR5bmFtaWMgYWRkaXRpb24uIFRoaXMgZnVydGhlciBzb2xpZGlmaWVzIHRoZSBkcml2ZXImIzM5O3MgdW5yZWFjaGFiaWxpdHkuCgpMZXQgbWUgcmV2aWV3IHRoZSBndWlkZWxpbmVzLiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiAtIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIE1ESU8gc3dpdGNoIGRyaXZlciBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUvWVQ5MjI0LCByZXF1aXJpbmcgZWl0aGVyIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGEgc3BlY2lmaWMgRFQgbm9kZSB0aGF0IGlzbiYjMzk7dCBwcmVzZW50IGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4gSXQmIzM5O3MgdW5yZWFjaGFibGUuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBvdGhlciBjaGFuZ2VzLiBUaGVyZSBhcmUgS2NvbmZpZyBjaGFuZ2VzLCBNYWtlZmlsZSBjaGFuZ2VzLCB0aGUgTURJTyBkcml2ZXIgKGB5dDkyMXguY2ApLCBhIGhlYWRlciwgYWRkcyBgRFNBX1RBR19QUk9UT19ZVDkyMlhfVkFMVUVgIGluIGBkc2EuaGAgYW5kIHRoZSB0YWcgZHJpdmVyIChgdGFnX3l0OTIxeC5jYCkuIEV2ZXJ5dGhpbmcgcG9pbnRzIHRvIHRoaXMgTW90b3Jjb21tIHN3aXRjaCBkcml2ZXIgYW5kIGl0cyB0YWcgZHJpdmVyLgoKU2luY2UgdGhlIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBhbmQgdGhlIGRyaXZlciB3b24mIzM5O3QgcHJvYmUgd2l0aG91dCBhIHNwZWNpZmljIERUIG5vZGUsIGl0JiMzOTtzIGFsbCB1bnJlYWNoYWJsZS4KCkkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjI0IGV0aGVybmV0IHN3aXRjaCBjaGlwIHRvIHRoZSB5dDkyMXggRFNBIGRyaXZlciBhbmQgYSBjb3JyZXNwb25kaW5nIERTQSB0YWcgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIGFuIE1ESU8gZHJpdmVyIHRoYXQgcmVsaWVzIG9uIERldmljZSBUcmVlIChPRiBtYXRjaCBkYXRhKSB0byBwcm9iZSwgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBvciBkeW5hbWljYWxseSBpbmplY3RhYmxlIGluIHN0YW5kYXJkIHg4Nl82NCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIEZ1cnRoZXJtb3JlLCB0aGUgRFNBIHRhZyBkcml2ZXIgY2Fubm90IGJlIHJlYWNoZWQgYmVjYXVzZSBubyBlbXVsYXRlZCBEU0Egc3dpdGNoIChsaWtlIGRzYV9sb29wKSBjYW4gYmUgY29uZmlndXJlZCB0byB1c2UgdGhlIG5ld2x5IGFkZGVkIERTQV9UQUdfUFJPVE9fWVQ5MjJYIHByb3RvY29sLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMjQgZXRoZXJuZXQgc3dpdGNoIGNoaXAgdG8gdGhlIHl0OTIxeCBEU0EgZHJpdmVyIGFuZCBhIGNvcnJlc3BvbmRpbmcgRFNBIHRhZyBkcml2ZXIuIFRoZSBkcml2ZXIgaXMgYW4gTURJTyBkcml2ZXIgdGhhdCByZWxpZXMgb24gRGV2aWNlIFRyZWUgKE9GIG1hdGNoIGRhdGEpIHRvIHByb2JlLCB3aGljaCBpcyBub3QgYXZhaWxhYmxlIG9yIGR5bmFtaWNhbGx5IGluamVjdGFibGUgaW4gc3RhbmRhcmQgeDg2XzY0IFFFTVUvR0NFIGVudmlyb25tZW50cy4gRnVydGhlcm1vcmUsIHRoZSBEU0EgdGFnIGRyaXZlciBjYW5ub3QgYmUgcmVhY2hlZCBiZWNhdXNlIG5vIGVtdWxhdGVkIERTQSBzd2l0Y2ggKGxpa2UgZHNhX2xvb3ApIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSB0aGUgbmV3bHkgYWRkZWQgRFNBX1RBR19QUk9UT19ZVDkyMlggcHJvdG9jb2wuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjIxOjI2LjgyNTU4ODMyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTc1NjcwMzMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMjQgZXRoZXJuZXQgc3dpdGNoIGNoaXAgdG8gdGhlIHl0OTIxeCBEU0EgZHJpdmVyIGFuZCBhIGNvcnJlc3BvbmRpbmcgRFNBIHRhZyBkcml2ZXIuIFRoZSBkcml2ZXIgaXMgYW4gTURJTyBkcml2ZXIgdGhhdCByZWxpZXMgb24gRGV2aWNlIFRyZWUgKE9GIG1hdGNoIGRhdGEpIHRvIHByb2JlLCB3aGljaCBpcyBub3QgYXZhaWxhYmxlIG9yIGR5bmFtaWNhbGx5IGluamVjdGFibGUgaW4gc3RhbmRhcmQgeDg2XzY0IFFFTVUvR0NFIGVudmlyb25tZW50cy4gRnVydGhlcm1vcmUsIHRoZSBEU0EgdGFnIGRyaXZlciBjYW5ub3QgYmUgcmVhY2hlZCBiZWNhdXNlIG5vIGVtdWxhdGVkIERTQSBzd2l0Y2ggKGxpa2UgZHNhX2xvb3ApIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSB0aGUgbmV3bHkgYWRkZWQgRFNBX1RBR19QUk9UT19ZVDkyMlggcHJvdG9jb2wuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjE6MjYuODI1NTk0NTI5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg0NzQwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYjkzMWU5MDJmMTgxZWExODI1MGI1OWFjOTQ3MzgyNWRkMWYyYjE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDE0IDAyOjIxOjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG5pbmRleCA0YWI1NjdjNWJiYWZjLi42OWM4MjRmZDk1YmY5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG5AQCAtMTU5LDExICsxNTksMTEgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXFxuIFxcdCAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXJcXG4gXFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxcbiBcXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXFxuLVxcdHRyaXN0YXRlIFxcXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcXFwiXFxuLVxcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcXG4rY29uZmlnIE5FVF9EU0FfWVQ5MlhYXFxuK1xcdHRyaXN0YXRlIFxcXCJNb3RvcmNvbW0gWVQ5MjE1IGFuZCBZVDkyMjQgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4rXFx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTJYWFxcbiBcXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxcbiBcXHRoZWxwXFxuLVxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxcbitcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBhbmQgWVQ5MjI0IGV0aGVybmV0IHN3aXRjaFxcbiBcXHQgIGNoaXAuXFxuIGVuZG1lbnVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuaW5kZXggZDI5NzViYWRmZmMwOS4uMThjMmNlZWYwOWE1MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcXG5AQCAtMTQsNyArMTQsNyBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTykgKz0gbGFuOTMwM19tZGlvLm9cXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSArPSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgKz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1NQSSkgKz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXFxuLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MlhYKSArPSB5dDkyMXgub1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGI1My9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBoaXJzY2htYW5uL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGxhbnRpcS9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jIGIvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXFxuaW5kZXggMTU5YjE2NjA2ZjZjYS4uNzQyNTU1Zjg3ODE5ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcXG5AQCAtMTQ4LDEwICsxNDgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcXG4gXFx0XFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oOCksXFxuIFxcdFxcdFlUOTIxWF9QT1JUX01BU0tfRVhUMCB8IFlUOTIxWF9QT1JUX01BU0tfRVhUMSxcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHRcXFwiWVQ5MjI0XFxcIiwgWVQ5MjI0X01BSk9SLCAwLCAwLFxcbitcXHRcXHQweDFmMSxcXG4rXFx0XFx0MHgwLFxcbitcXHR9LFxcbiBcXHR7fVxcbiB9O1xcbiBcXG4tI2RlZmluZSBZVDkyMVhfTkFNRVxcdFxcXCJ5dDkyMXhcXFwiXFxuKyNkZWZpbmUgWVQ5MlhYX05BTUVcXHRcXFwieXQ5Mnh4XFxcIlxcbiBcXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVxcdDQwOTVcXG4gXFxuQEAgLTU2MCwxMCArNTY1LDEyIEBAIHl0OTIxeF9pbnRpZl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxcbiBzdGF0aWMgaW50IHl0OTIxeF9tYnVzX2ludF9yZWFkKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZylcXG4ge1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtYnVzLVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgbWF4X3BvcnRzO1xcbiBcXHR1MTYgdmFsO1xcbiBcXHRpbnQgcmVzO1xcbiBcXG4tXFx0aWYgKHBvcnQgXFx1MDAzZT0gWVQ5MjFYX1BPUlRfTlVNKVxcbitcXHRtYXhfcG9ydHMgPSBwcml2LVxcdTAwM2VjaGlwX2luZm8tXFx1MDAzZXBvcnRzO1xcbitcXHRpZiAocG9ydCBcXHUwMDNlPSBtYXhfcG9ydHMpXFxuIFxcdFxcdHJldHVybiBVMTZfTUFYO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbkBAIC01NzksOSArNTg2LDExIEBAIHN0YXRpYyBpbnRcXG4geXQ5MjF4X21idXNfaW50X3dyaXRlKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IGRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IG1heF9wb3J0cztcXG4gXFx0aW50IHJlcztcXG4gXFxuLVxcdGlmIChwb3J0IFxcdTAwM2U9IFlUOTIxWF9QT1JUX05VTSlcXG4rXFx0bWF4X3BvcnRzID0gcHJpdi1cXHUwMDNlY2hpcF9pbmZvLVxcdTAwM2Vwb3J0cztcXG4rXFx0aWYgKHBvcnQgXFx1MDAzZT0gbWF4X3BvcnRzKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5AQCAtNTk2LDE5ICs2MDUsMjEgQEAgeXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG4ge1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuIFxcdHN0cnVjdCBtaWlfYnVzICptYnVzO1xcbitcXHRpbnQgbWF4X3BvcnRzO1xcbiBcXHRpbnQgcmVzO1xcbiBcXG4gXFx0bWJ1cyA9IGRldm1fbWRpb2J1c19hbGxvYyhkZXYpO1xcbiBcXHRpZiAoIW1idXMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0bWF4X3BvcnRzID0gcHJpdi1cXHUwMDNlY2hpcF9pbmZvLVxcdTAwM2Vwb3J0cztcXG4gXFx0bWJ1cy1cXHUwMDNlbmFtZSA9IFxcXCJZVDkyMXggaW50ZXJuYWwgTURJTyBidXNcXFwiO1xcbiBcXHRzbnByaW50ZihtYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwiJXNcXFwiLCBkZXZfbmFtZShkZXYpKTtcXG4gXFx0bWJ1cy1cXHUwMDNlcHJpdiA9IHByaXY7XFxuIFxcdG1idXMtXFx1MDAzZXJlYWQgPSB5dDkyMXhfbWJ1c19pbnRfcmVhZDtcXG4gXFx0bWJ1cy1cXHUwMDNld3JpdGUgPSB5dDkyMXhfbWJ1c19pbnRfd3JpdGU7XFxuIFxcdG1idXMtXFx1MDAzZXBhcmVudCA9IGRldjtcXG4tXFx0bWJ1cy1cXHUwMDNlcGh5X21hc2sgPSAodTMyKX5HRU5NQVNLKFlUOTIxWF9QT1JUX05VTSAtIDEsIDApO1xcbitcXHRtYnVzLVxcdTAwM2VwaHlfbWFzayA9ICh1MzIpfkdFTk1BU0sobWF4X3BvcnRzIC0gMSwgMCk7XFxuIFxcbiBcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbiBcXHRpZiAocmVzKVxcbkBAIC00NzQ4LDYgKzQ3NTksMTMgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcXG4gXFx0aW50IHJlcztcXG4gXFxuK1xcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldO1xcbitcXG4rXFx0XFx0cHAtXFx1MDAzZWluZGV4ID0gaTtcXG4rXFx0XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnBwLVxcdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcXG4rXFx0fVxcbitcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbiBcXHRyZXMgPSB5dDkyMXhfY2hpcF9yZXNldChwcml2KTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuQEAgLTQ4NjksMTE0ICs0ODg3LDkzNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcXG4gXFx0LnNldHVwXFx0XFx0XFx0PSB5dDkyMXhfZHNhX3NldHVwLFxcbiB9O1xcbiBcXG4tc3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbitzdGF0aWMgaW50IHl0OTIyeF9wb3J0X2Rvd24oc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcXG4ge1xcbi1cXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0aW50IHJlcztcXG4gXFxuLVxcdGlmICghcHJpdilcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHQvKiBtYWMgZm9yY2UgZG93biAqL1xcbitcXHRtYXNrID0gWVQ5MjJYX1BPUlRfTElOSyB8IFlUOTIyWF9QT1JUX1JYX01BQ19FTiB8XFxuK1xcdCAgICAgICBZVDkyMlhfUE9SVF9UWF9NQUNfRU4gfCBZVDkyMlhfUE9SVF9MSU5LX0FOO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX2NsZWFyX2JpdHMocHJpdiwgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCksIG1hc2spO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHQvKiBOZWVkIGZvcmNlIG9wIHRvIG1ha2Ugc29mdCBjb25maWd1cmF0aW9uIGVmZmVjdGl2ZSAqL1xcbitcXHRtYXNrID0gWVQ5MjJYX1BPUlRfRk9SQ0VfT1A7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCksIG1hc2spO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbiBcXG4tXFx0ZHNhX3N3aXRjaF9zaHV0ZG93bihcXHUwMDI2cHJpdi1cXHUwMDNlZHMpO1xcbitcXHQvKiBkaXNhYmxlIGVuX3BoeSAqL1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX2NsZWFyX2JpdHMocHJpdiwgWVQ5MjJYX0VOX1BIWV9WQUxVRSwgQklUKHBvcnQpKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfRU5fUEhZX09WRVJXUklURSwgQklUKHBvcnQpKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbitzdGF0aWMgdm9pZFxcbit5dDkyMnhfcGh5bGlua19tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4rXFx0XFx0XFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbiB7XFxuLVxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRwLVxcdTAwM2Vkcyk7XFxuK1xcdGludCBwb3J0ID0gZHAtXFx1MDAzZWluZGV4O1xcbitcXHRpbnQgcmVzO1xcbiBcXG4tXFx0aWYgKCFwcml2KVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjJ4X3BvcnRfZG93bihwcml2LCBwb3J0KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuIFxcbi1cXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGktLSBcXHUwMDNlIDA7ICkge1xcbi1cXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRkZXZfZXJyKGRwLVxcdTAwM2Vkcy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvICVzIHBvcnQgJWQ6ICVpXFxcXG5cXFwiLCBcXFwiYnJpbmcgZG93blxcXCIsXFxuK1xcdFxcdFxcdHBvcnQsIHJlcyk7XFxuK31cXG4gXFxuLVxcdFxcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNnBwLVxcdTAwM2VtaWJfcmVhZCk7XFxuK3N0YXRpYyBpbnRcXG4reXQ5MjJ4X3BvcnRfdXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IG1vZGUsXFxuK1xcdCAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQsIGludCBkdXBsZXgsXFxuK1xcdCAgICAgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxcbit7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHN3aXRjaCAoc3BlZWQpIHtcXG4rXFx0Y2FzZSBTUEVFRF8xMDpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9QT1JUX1NQRUVEXzEwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBTUEVFRF8xMDA6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFNQRUVEXzEwMDA6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDAwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBTUEVFRF8yNTAwOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX1BPUlRfU1BFRURfMjUwMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU1BFRURfMTAwMDA6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDAwMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuK1xcdGlmIChkdXBsZXggPT0gRFVQTEVYX0ZVTEwpXFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjJYX1BPUlRfRFVQTEVYX0ZVTEw7XFxuK1xcdGlmICh0eF9wYXVzZSlcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMlhfUE9SVF9UWF9QQVVTRTtcXG4rXFx0aWYgKHJ4X3BhdXNlKVxcbitcXHRcXHRjdHJsIHw9IFlUOTIyWF9QT1JUX1JYX1BBVVNFO1xcbitcXHRjdHJsIHw9IFlUOTIyWF9QT1JUX1JYX01BQ19FTiB8IFlUOTIyWF9QT1JUX1RYX01BQ19FTiB8XFxuK1xcdFxcdFlUOTIyWF9QT1JUX0NGR19UWF9FTiB8IFlUOTIyWF9QT1JUX0xJTksgfFxcbitcXHRcXHRZVDkyMlhfUE9SVF9DRkdfUlhfRU47XFxuK1xcdGN0cmwgXFx1MDAyNj0gfihZVDkyMlhfUE9SVF9GQ19BTiB8IFlUOTIyWF9QT1JUX0xJTktfQU4pO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9QT1JUbl9DVFJMKHBvcnQpLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0LyogZm9yY2Ugb3AgKi9cXG4rXFx0bWFzayA9IFlUOTIyWF9QT1JUX0ZPUkNFX09QO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIyWF9QT1JUbl9DVFJMKHBvcnQpLCBtYXNrKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4gXFxuLVxcdGRzYV91bnJlZ2lzdGVyX3N3aXRjaChcXHUwMDI2cHJpdi1cXHUwMDNlZHMpO1xcbitcXHQvKiBlbmFibGUgZW5fcGh5ICovXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjJYX0VOX1BIWV9WQUxVRSwgQklUKHBvcnQpKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfRU5fUEhZX09WRVJXUklURSwgQklUKHBvcnQpKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4gXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwcml2LVxcdTAwM2VhY2xfYmxrcyk7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgeXQ5MjF4X2FjbF9ibGsgKmFjbGJsayA9IHByaXYtXFx1MDAzZWFjbF9ibGtzW2ldO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbiBcXG4tXFx0XFx0aWYgKCFhY2xibGspXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoYWNsYmxrLVxcdTAwM2VydWxlcyk7IGorKykge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2FjbF9ydWxlICphY2xydWxlID0gYWNsYmxrLVxcdTAwM2VydWxlc1tqXTtcXG4rc3RhdGljIHZvaWRcXG4reXQ5MjJ4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHVuc2lnbmVkIGludCBtb2RlLFxcbitcXHRcXHRcXHQgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQsIGludCBkdXBsZXgsXFxuK1xcdFxcdFxcdCAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXFxuK3tcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV9waHlsaW5rX3RvX3BvcnQoY29uZmlnKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHAtXFx1MDAzZWRzKTtcXG4rXFx0aW50IHBvcnQgPSBkcC1cXHUwMDNlaW5kZXg7XFxuK1xcdGludCByZXM7XFxuIFxcbi1cXHRcXHRcXHRpZiAoIWFjbHJ1bGUpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRrdmZyZWUoYWNscnVsZSk7XFxuLVxcdFxcdH1cXG4tXFx0XFx0a3ZmcmVlKGFjbGJsayk7XFxuLVxcdH1cXG4tXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIyeF9wb3J0X3VwKHByaXYsIHBvcnQsIG1vZGUsIGludGVyZmFjZSwgc3BlZWQsIGR1cGxleCxcXG4rXFx0XFx0XFx0ICAgICB0eF9wYXVzZSwgcnhfcGF1c2UpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGRldl9lcnIoZHAtXFx1MDAzZWRzLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcXFxcblxcXCIsIFxcXCJicmluZyB1cFxcXCIsXFxuK1xcdFxcdFxcdHBvcnQsIHJlcyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbitzdGF0aWMgaW50XFxuK3l0OTIyeF9pbnRpZl9leHRfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgKnZhbHApXFxuIHtcXG4tXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG4tXFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcXG4tXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2O1xcbi1cXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XFxuK1xcdGludCByZXM7XFxuIFxcbi1cXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghcHJpdilcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdGlmIChwb3J0IFxcdTAwM2U9IFlUOTIyWF9QT1JUX05VTSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbi1cXHRtZGlvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptZGlvKSwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghbWRpbylcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBwb3J0LCBZVDkyWFhfUEFHRV9TRUxFQ1QsIHJlZyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuIFxcbi1cXHRtZGlvLVxcdTAwM2VidXMgPSBtZGlvZGV2LVxcdTAwM2VidXM7XFxuLVxcdG1kaW8tXFx1MDAzZWFkZHIgPSBtZGlvZGV2LVxcdTAwM2VhZGRyO1xcbi1cXHRtZGlvLVxcdTAwM2Vzd2l0Y2hpZCA9IDA7XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9yZWFkKHByaXYsIHBvcnQsIFlUOTJYWF9QQUdFLCB2YWxwKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4gXFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gXFxuLVxcdHByaXYtXFx1MDAzZXJlZ19vcHMgPSBcXHUwMDI2eXQ5MjF4X3JlZ19vcHNfbWRpbztcXG4tXFx0cHJpdi1cXHUwMDNlcmVnX2N0eCA9IG1kaW87XFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2ludGlmX2V4dF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXM7XFxuIFxcbi1cXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlcG9ydHMpOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG4rXFx0aWYgKHBvcnQgXFx1MDAzZT0gWVQ5MjFYX1BPUlRfTlVNKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuLVxcdFxcdHBwLVxcdTAwM2VpbmRleCA9IGk7XFxuLVxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQsIHl0OTIxeF9wb2xsX21pYik7XFxuLVxcdH1cXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIHBvcnQsIFlUOTJYWF9QQUdFX1NFTEVDVCwgcmVnKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4gXFxuLVxcdGRzID0gXFx1MDAyNnByaXYtXFx1MDAzZWRzO1xcbi1cXHRkcy1cXHUwMDNlZGV2ID0gZGV2O1xcbi1cXHRkcy1cXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xcbi1cXHRkcy1cXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcXG4tXFx0ZHMtXFx1MDAzZXByaXYgPSBwcml2O1xcbi1cXHRkcy1cXHUwMDNlb3BzID0gXFx1MDAyNnl0OTIxeF9kc2Ffc3dpdGNoX29wcztcXG4tXFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xcbi1cXHRkcy1cXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDUwMDA7XFxuLVxcdGRzLVxcdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcztcXG4tXFx0ZHMtXFx1MDAzZW51bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07XFxuLVxcdGRzLVxcdTAwM2VudW1fcG9ydHMgPSBZVDkyMVhfUE9SVF9OVU07XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBwb3J0LCBZVDkyWFhfUEFHRSwgdmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4gXFxuLVxcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XFxuK3N0YXRpYyBpbnQgeXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0KGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgZW51bSB5dDkyMnhfcGh5X3JlZ190eXBlIHJlZ190eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZW51bSB5dDkyMnhfcGh5X3JlZ19zcGFjZSByZWdfc3BhY2UpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChwb3J0IFxcdTAwM2U9IDQgXFx1MDAyNlxcdTAwMjYgcG9ydCBcXHUwMDNjPSA3KSB7XFxuK1xcdFxcdHN3aXRjaCAocmVnX3R5cGUpIHtcXG4rXFx0XFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQ6XFxuK1xcdFxcdFxcdHJlcyA9IDk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfUEhZX0NPTU1PTl9FWFQ6XFxuK1xcdFxcdFxcdGlmIChwb3J0IFxcdTAwM2M9IDUgXFx1MDAyNlxcdTAwMjYgcG9ydCBcXHUwMDNlPSA0KVxcbitcXHRcXHRcXHRcXHRyZXMgPSA0O1xcbitcXHRcXHRcXHRlbHNlIGlmIChwb3J0IFxcdTAwM2M9IDcgXFx1MDAyNlxcdTAwMjYgcG9ydCBcXHUwMDNlPSA2KVxcbitcXHRcXHRcXHRcXHRyZXMgPSA2O1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhUOlxcbitcXHRcXHRcXHRyZXMgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0aWYgKHJlZ19zcGFjZSAhPSBZVDkyMlhfUEhZX1JFR19TUEFDRV9QSFkpXFxuK1xcdFxcdFxcdFxcdHJlcyA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChwb3J0ID09IDgpIHtcXG4rXFx0XFx0XFx0c3dpdGNoIChyZWdfdHlwZSkge1xcbitcXHRcXHRcXHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfQ09NTU9OX0VYVDpcXG4rXFx0XFx0XFx0XFx0cmVzID0gOTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVDpcXG4rXFx0XFx0XFx0XFx0cmVzID0gODtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9NSUk6XFxuK1xcdFxcdFxcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9FWFQ6XFxuK1xcdFxcdFxcdFxcdGlmIChyZWdfc3BhY2UgPT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkgfHxcXG4rXFx0XFx0XFx0XFx0ICAgIHJlZ19zcGFjZSA9PSBZVDkyMlhfUEhZX1JFR19TUEFDRV9VU1hHTUlJKVxcbitcXHRcXHRcXHRcXHRcXHRyZXMgPSA4O1xcbitcXHRcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdFxcdHJlcyA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRcXHRyZXMgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRcXHR9XFxuK1xcdFxcdHN3aXRjaCAocmVnX3R5cGUpIHtcXG4rXFx0XFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQ6XFxuK1xcdFxcdFxcdHJlcyA9IDk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQ6XFxuK1xcdFxcdFxcdHJlcyA9IDA7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfTUlJOlxcbitcXHRcXHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfRVhUOlxcbitcXHRcXHRcXHRpZiAocmVnX3NwYWNlID09IFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJIHx8XFxuK1xcdFxcdFxcdCAgICByZWdfc3BhY2UgPT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfVVNYR01JSSlcXG4rXFx0XFx0XFx0XFx0cmVzID0gMDtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRyZXMgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0cmVzID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4gfVxcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5MjF4X29mX21hdGNoW10gPSB7XFxuLVxcdHsgLmNvbXBhdGlibGUgPSBcXFwibW90b3Jjb21tLHl0OTIxNVxcXCIgfSxcXG4rc3RhdGljIGludCB5dDkyMnhfcG9ydF9zZHNfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdGludCBhZGRyO1xcbitcXHR1MTYgZGF0YTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQocG9ydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkpO1xcbitcXHRpZiAoYWRkciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHQvKiB3cml0ZSBwcm90ZWN0ICovXFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0YmUsIDB4ZCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdC8qIENEUiAqL1xcbitcXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDBCQVNFWCkge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDA2LCAweDApO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDE2LCAweDM0NTgpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDA2LCAweDgwMCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MTYsIDB4NDU1OCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFx0LyogUExMICovXFxuK1xcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzYSwgMHgxMDA2KTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzZiwgMHgzMDI5KTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQyYSwgMHhmMDcwKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzZCwgMHgyMDdkKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzYywgMHgyMDdkKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzZiwgMHgzMDMyKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzYSwgMHg2KTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQyYSwgMHhmMDcwKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXHQvKiBWQ08gKi9cXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzOSwgMHhDMCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdC8qIFZkYWMgKi9cXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ5MiwgMHg3ZjdmKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ5MSwgMHg3Zik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdC8qIEV5ZSAqL1xcbitcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDU0LCAweGYxNCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTcsIDB4YTQ0KTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRjZCwgMHgwKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0YWYsIDB4NDVlMyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OGEsIDB4ZmZmKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQwOCwgMHg3YzAwKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRkNiwgMHg3Zik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0NGYsIDB4ZmYwOCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdC8qIEZGRSAqL1xcbitcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDhlLCAweDdkMDApO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4ZCwgMHg2MGYpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHQvKiBDVExFICovXFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0YjAsIDB4ODA0KTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRiMSwgMHg3Nzc0KTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRhZiwgMHg0NWU3KTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDMsIDB4NTYwMyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRtc2xlZXAoMjApO1xcbitcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDkyLCAweDdmZmYpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDkyLCAweDdmN2YpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHQvKiBDVExFICovXFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHgyMDAwLCAweDQwKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDIwMDAsIDB4MCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4MTA0MiwgMHg0OGMpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbisgICAgLyogc29mdCByZXNldCAqL1xcbitcXHRhZGRyID0geXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0KHBvcnQsIFlUOTIyWF9QSFlfUkVHX1RZUEVfTUlJLFxcbitcXHRcXHRcXHRcXHRcXHQgICBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSk7XFxuK1xcdGlmIChhZGRyIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX3JlYWQocHJpdiwgYWRkciwgMHgyMDAwLCBcXHUwMDI2ZGF0YSk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdGRhdGEgXFx1MDAyNj0gfigxIFxcdTAwM2NcXHUwMDNjIDE1KTtcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIGFkZHIsIDB4MjAwMCwgZGF0YSk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdGFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQocG9ydCwgWVQ5MjJYX1BIWV9SRUdfVFlQRV9NSUksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFlUOTIyWF9QSFlfUkVHX1NQQUNFX1VTWEdNSUkpO1xcbitcXHRpZiAoYWRkciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9yZWFkKHByaXYsIGFkZHIsIDB4MCwgXFx1MDAyNmRhdGEpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRkYXRhIHw9IDEgXFx1MDAzY1xcdTAwM2MgMTU7XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBhZGRyLCAweDAsIGRhdGEpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjJ4X3BvcnRfY29uZmlnKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHVuc2lnbmVkIGludCBtb2RlLFxcbitcXHRcXHQgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdGludCBhZGRyO1xcbitcXHR1MTYgZGF0YTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQocG9ydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkpO1xcbitcXHRpZiAoYWRkciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRzd2l0Y2ggKGludGVyZmFjZSkge1xcbitcXHQvKiBTRVJERVMgKi9cXG4rXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuK1xcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMEJBU0VYOlxcbitcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XFxuK1xcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDpcXG4rXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTpcXG4rXFx0XFx0cmVzID0geXQ5MjJ4X3BvcnRfc2RzX2luaXQocHJpdiwgcG9ydCwgaW50ZXJmYWNlKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdFxcdGFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXRcXG4rXFx0XFx0XFx0KHBvcnQsIFlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQsXFxuK1xcdFxcdFxcdCBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSk7XFxuK1xcdFxcdGlmIChhZGRyIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRyZXMgPSB5dDkyMnhfaW50aWZfZXh0X3JlYWQocHJpdiwgYWRkciwgWVQ5MjJYX1BPUlRfU0RTX01PREUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2ZGF0YSk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRcXHRkYXRhIFxcdTAwMjY9ICh+MHg3IFxcdTAwM2NcXHUwMDNjIDQpO1xcbitcXHRcXHRzd2l0Y2ggKGludGVyZmFjZSkge1xcbitcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcXG4rXFx0XFx0XFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV9TR01JSSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDBCQVNFWDpcXG4rXFx0XFx0XFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV8xMDBCQVNFWCk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XFxuK1xcdFxcdFxcdGRhdGEgfD0gRklFTERfUFJFUChZVDkyMlhfUE9SVF9TRFNfTU9ERV9NLFxcbitcXHRcXHRcXHRcXHRcXHQgICBZVDkyWFhfU0VSREVTX01PREVfMTAwMEJBU0VYKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDpcXG4rXFx0XFx0XFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV8yNTAwQkFTRVgpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTpcXG4rXFx0XFx0XFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV9VU1hHTUlJKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgWVQ5MjJYX1BPUlRfU0RTX01PREUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgZGF0YSk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkXFxuK3l0OTIyeF9waHlsaW5rX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxcbitcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRwLVxcdTAwM2Vkcyk7XFxuK1xcdGludCBwb3J0ID0gZHAtXFx1MDAzZWluZGV4O1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMnhfcG9ydF9jb25maWcocHJpdiwgcG9ydCwgbW9kZSwgc3RhdGUtXFx1MDAzZWludGVyZmFjZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0ZGV2X2VycihkcC1cXHUwMDNlZHMtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxcXFxuXFxcIiwgXFxcImNvbmZpZ1xcXCIsXFxuK1xcdFxcdFxcdHBvcnQsIHJlcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHl0OTIyeF9waHlsaW5rX21hY19vcHMgPSB7XFxuK1xcdC5tYWNfbGlua19kb3duXFx0PSB5dDkyMnhfcGh5bGlua19tYWNfbGlua19kb3duLFxcbitcXHQubWFjX2xpbmtfdXBcXHQ9IHl0OTIyeF9waHlsaW5rX21hY19saW5rX3VwLFxcbitcXHQubWFjX2NvbmZpZ1xcdD0geXQ5MjJ4X3BoeWxpbmtfbWFjX2NvbmZpZyxcXG4rfTtcXG4rXFxuK3N0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcXG4reXQ5MjJ4X2RzYV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcXG4re1xcbitcXHRyZXR1cm4gRFNBX1RBR19QUk9UT19ZVDkyMlg7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkXFxuK3l0OTIyeF9kc2FfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbitcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm8gPSBwcml2LVxcdTAwM2VpbmZvO1xcbitcXG4rXFx0Y29uZmlnLVxcdTAwM2VtYWNfY2FwYWJpbGl0aWVzID0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFIHxcXG4rXFx0XFx0XFx0XFx0ICAgTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwO1xcbitcXG4rXFx0aWYgKGluZm8tXFx1MDAzZWludGVybmFsX21hc2sgXFx1MDAyNiBCSVQocG9ydCkpIHtcXG4rXFx0XFx0aWYgKHBvcnQgXFx1MDAzZT0gNCBcXHUwMDI2XFx1MDAyNiBwb3J0IFxcdTAwM2M9IDcpIHtcXG4rXFx0XFx0XFx0LyogcG9ydCA0IHRvIHBvcnQgNywgaW50ZXJuYWwgdXRwICovXFxuK1xcdFxcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwsXFxuK1xcdFxcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdFxcdFxcdGNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMEZEO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLFxcbitcXHRcXHRcXHRcXHQgIGNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbitcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMEJBU0VYLFxcbitcXHRcXHRcXHRcXHQgIGNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbitcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCxcXG4rXFx0XFx0XFx0XFx0ICBjb25maWctXFx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFx0XFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgsXFxuK1xcdFxcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdFxcdFxcdGNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMEZEO1xcbitcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUksXFxuK1xcdFxcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdFxcdFxcdGNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMEZEO1xcbitcXHRcXHRcXHRjb25maWctXFx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzUwMDBGRDtcXG4rXFx0XFx0XFx0Y29uZmlnLVxcdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwMEZEO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGV4dGVybmFsIHBvcnQgd2lsbCBhZGRlZCBsYXRlciAqL1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeXQ5MjJ4X3BvcnRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdC8qIGVuYWJsZSB1c2VyIHBvcnQgaXNvbGF0aW9uIGFuZCBkaXNhYmxlIGZkYiBsZWFybmluZyAqL1xcbitcXHRjdHJsID0gfnByaXYtXFx1MDAzZWNwdV9wb3J0c19tYXNrO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9QT1JUbl9JU09MQVRJT04ocG9ydCksIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0bWFzayA9IFlUOTIyWF9QT1JUX0xFQVJOX0RJUztcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfUE9SVG5fTEVBUk4ocG9ydCksIG1hc2spO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpIHtcXG4rXFx0XFx0Y3RybCA9IH4odTMyKTA7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX1BPUlRuX0lTT0xBVElPTihwb3J0KSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGN0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0OTIyeF9kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjJ4X3BvcnRfc2V0dXAocHJpdiwgcG9ydCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludCB5dDkyMnhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvICppbmZvO1xcbitcXHR1MzIgY2hpcGlkO1xcbitcXHR1MzIgbWFqb3I7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfSUQsIFxcdTAwMjZjaGlwaWQpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRtYWpvciA9IEZJRUxEX0dFVChZVDkyMVhfQ0hJUF9JRF9NQUpPUiwgY2hpcGlkKTtcXG4rXFx0Zm9yIChpbmZvID0geXQ5MjF4X2luZm9zOyBpbmZvLVxcdTAwM2VuYW1lOyBpbmZvKyspXFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VtYWpvciA9PSBtYWpvcilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdGlmICghaW5mby1cXHUwMDNlbmFtZSkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIlVuZXhwZWN0ZWQgY2hpcGlkIDB4JXhcXFxcblxcXCIsIGNoaXBpZCk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcdHByaXYtXFx1MDAzZWluZm8gPSBpbmZvO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRyZXMgPSB5dDkyMnhfY2hpcF9kZXRlY3QocHJpdik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHQvKiBSZXNldCAqL1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9SU1QsIFlUOTIxWF9SU1RfSFcpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0ZnNsZWVwKFlUOTIxWF9SU1RfREVMQVlfVVMpO1xcbitcXG4rXFx0dmFsID0gMDtcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9SU1QsIH4wLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0OTIyeF9jaGlwX3NldHVwX2RzYShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBjcHVfcG9ydHNfbWFzaztcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdGludCBwb3J0O1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0Y3RybCA9IEdFTk1BU0soOSwgMCk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0ZJTFRFUl9VTktfVUNBU1QsIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Y3RybCA9IDA7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlY2hpcF9pbmZvLVxcdTAwM2Vwb3J0czsgaSsrKVxcbitcXHRcXHRjdHJsIHw9IFlUOTIyWF9BQ1RfVU5LX0FDVG5fVFJBUChpKTtcXG4rXFx0Y3B1X3BvcnRzX21hc2sgPSBwcml2LVxcdTAwM2VjcHVfcG9ydHNfbWFzaztcXG4rXFx0Zm9yX2VhY2hfc2V0X2JpdChwb3J0LCBcXHUwMDI2Y3B1X3BvcnRzX21hc2ssIHByaXYtXFx1MDAzZWNoaXBfaW5mby1cXHUwMDNlcG9ydHMpIHtcXG4rXFx0XFx0Y3RybCBcXHUwMDI2PSB+WVQ5MjJYX0FDVF9VTktfQUNUbl9NKHBvcnQpO1xcbitcXHRcXHRjdHJsIHw9IFlUOTIyWF9BQ1RfVU5LX0FDVG5fRFJPUChwb3J0KTtcXG4rXFx0fVxcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9BQ1RfVU5LX1VDQVNULCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQUNUX1VOS19NQ0FTVCwgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB5dDkyMnhfY2hpcF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRjdHJsID0gWVQ5MjJYX0ZVTkNfTUlCIHwgWVQ5MjJYX0ZVTkNfQUNMO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIxWF9GVU5DLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIyeF9jaGlwX3NldHVwX2RzYShwcml2KTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0OTIyeF9jcHVfdGFnX21vZGVfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHUxNiBldGhfcF90YWc7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdHUzMiB2YWwxO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0LyogY3B1IHRhZyBtb2RlIHNldCAqL1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjJYX0NQVV9UQUdfUlhfQ1RSTCwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMlhfQ1BVX1RBR19UWF9DVFJMLCBcXHUwMDI2dmFsMSk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdHZhbCBcXHUwMDI2PSB+WVQ5MjJYX0NQVV9UQUdfUlhfTU9ERTtcXG4rXFx0dmFsMSBcXHUwMDI2PSB+WVQ5MjJYX0NQVV9UQUdfVFhfTU9ERTtcXG4rXFx0dmFsMSBcXHUwMDI2PSB+WVQ5MjJYX0NQVV9UQUdfVFhfVFlQRTtcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQ1BVX1RBR19SWF9DVFJMLCB2YWwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9DUFVfVEFHX1RYX0NUUkwsIHZhbDEpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0LyogdHBpZCBjaGVjayAqL1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NQVV9UQUdfVFBJRCwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdGV0aF9wX3RhZyA9IEZJRUxEX0dFVChZVDkyMVhfQ1BVX1RBR19UUElEX1RQSURfTSwgdmFsKTtcXG4rXFx0aWYgKGV0aF9wX3RhZyAhPSBFVEhfUF9ZVDkyMVgpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJUYWcgdHlwZSAweCV4ICE9IDB4JXhcXFxcblxcXCIsIGV0aF9wX3RhZyxcXG4rXFx0XFx0XFx0RVRIX1BfWVQ5MjFYKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0OTIyeF9jcHVfcG9ydF9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHQvKiBjcHUgdGFnIG1vZGUgKi9cXG4rXFx0cmVzID0geXQ5MjJ4X2NwdV90YWdfbW9kZV9zZXQocHJpdik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHQvKiBFbmFibGUgRFNBICovXFxuK1xcdHByaXYtXFx1MDAzZWNwdV9wb3J0c19tYXNrID0gZHNhX2NwdV9wb3J0cyhkcyk7XFxuK1xcdGN0cmwgPSBZVDkyMVhfRVhUX0NQVV9QT1JUX1RBR19FTiB8IFlUOTIxWF9FWFRfQ1BVX1BPUlRfUE9SVF9FTiB8XFxuK1xcdCAgICAgICBZVDkyMVhfRVhUX0NQVV9QT1JUX1BPUlQoX19mZnMocHJpdi1cXHUwMDNlY3B1X3BvcnRzX21hc2spKTtcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfRVhUX0NQVV9QT1JULCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdC8qIFNldHVwIHNvZnR3YXJlIHN3aXRjaCAqL1xcbitcXHRjdHJsID0gWVQ5MjJYX0NQVV9DT1BZX1RPX0VYVF9DUFU7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0NQVV9DT1BZLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeXQ5MjJ4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtXFx1MDAzZW9mX25vZGU7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIyeF9jaGlwX3Jlc2V0KHByaXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdC8qIFJlZ2lzdGVyIHRoZSBpbnRlcm5hbCBtZGlvIGJ1cy4gKi9cXG4rXFx0Y2hpbGQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXFxcIm1kaW9cXFwiKTtcXG4rXFx0aWYgKGNoaWxkKSB7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9tYnVzX2ludF9pbml0KHByaXYsIGNoaWxkKTtcXG4rXFx0XFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbitcXHQgLyogY3B1IHBvcnQgc2V0ICovXFxuK1xcdCBtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdCByZXMgPSB5dDkyMnhfY3B1X3BvcnRfc2V0KHByaXYpO1xcbitcXHQgbXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIyeF9jaGlwX3NldHVwKHByaXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIyeF9kc2Ffc3dpdGNoX29wcyA9IHtcXG4rXFx0LyogcG9ydCAqL1xcbitcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0geXQ5MjJ4X2RzYV9nZXRfdGFnX3Byb3RvY29sLFxcbitcXHQucGh5bGlua19nZXRfY2Fwc1xcdD0geXQ5MjJ4X2RzYV9waHlsaW5rX2dldF9jYXBzLFxcbitcXHQucG9ydF9zZXR1cFxcdFxcdD0geXQ5MjJ4X2RzYV9wb3J0X3NldHVwLFxcbitcXHQvKiBjaGlwICovXFxuK1xcdC5zZXR1cFxcdFxcdFxcdD0geXQ5MjJ4X2RzYV9zZXR1cCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5Mnh4X2NoaXBfaW5mbyB5dDkyeHhfY2hpcF9pbmZvX3RhYmxlW10gPSB7XFxuK1xcdFtZVDkyMTVdID0ge1xcbitcXHRcXHQubW9kZSA9IFlUOTIxNSxcXG4rXFx0XFx0Lm5hbWUgPSBcXFwibW90b3Jjb21tIHl0OTIxNVxcXCIsXFxuK1xcdFxcdC5wb3J0cyA9IFlUOTIxWF9QT1JUX05VTSxcXG4rXFx0XFx0LmxhZ19pZCA9IFlUOTIxWF9MQUdfTlVNLFxcbitcXHRcXHQuYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDAsXFxuK1xcdFxcdC5hZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMCxcXG4rXFx0XFx0LnN3aXRjaF9vcHMgPSBcXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzLFxcbitcXHRcXHQubWFjX29wcyA9IFxcdTAwMjZ5dDkyMXhfcGh5bGlua19tYWNfb3BzLFxcbitcXHR9LFxcbitcXHRbWVQ5MjI0XSA9IHtcXG4rXFx0XFx0Lm1vZGUgPSBZVDkyMjQsXFxuK1xcdFxcdC5uYW1lID0gXFxcIm1vdG9yY29tbSB5dDkyMjRcXFwiLFxcbitcXHRcXHQucG9ydHMgPSBZVDkyMlhfUE9SVF9OVU0sXFxuK1xcdFxcdC5sYWdfaWQgPSBZVDkyMlhfTEFHX05VTSxcXG4rXFx0XFx0LmFnZWluZ190aW1lX21pbiA9IDEgKiA2MDAwLFxcbitcXHRcXHQuYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDYwMDAsXFxuK1xcdFxcdC5zd2l0Y2hfb3BzID0gXFx1MDAyNnl0OTIyeF9kc2Ffc3dpdGNoX29wcyxcXG4rXFx0XFx0Lm1hY19vcHMgPSBcXHUwMDI2eXQ5MjJ4X3BoeWxpbmtfbWFjX29wcyxcXG4rXFx0fSxcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHl0OTJ4eF9tZGlvX3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpO1xcbitcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRkc2Ffc3dpdGNoX3NodXRkb3duKFxcdTAwMjZwcml2LVxcdTAwM2Vkcyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHl0OTJ4eF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcXG4rXFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlcG9ydHMpOyBpLS0gXFx1MDAzZSAwOyApIHtcXG4rXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG4rXFxuK1xcdFxcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNnBwLVxcdTAwM2VtaWJfcmVhZCk7XFxuK1xcdH1cXG4rXFxuK1xcdGRzYV91bnJlZ2lzdGVyX3N3aXRjaChcXHUwMDI2cHJpdi1cXHUwMDNlZHMpO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZWFjbF9ibGtzKTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCB5dDkyMXhfYWNsX2JsayAqYWNsYmxrID0gcHJpdi1cXHUwMDNlYWNsX2Jsa3NbaV07XFxuK1xcbitcXHRcXHRpZiAoIWFjbGJsaylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIFxcdTAwM2MgQVJSQVlfU0laRShhY2xibGstXFx1MDAzZXJ1bGVzKTsgaisrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB5dDkyMXhfYWNsX3J1bGUgKmFjbHJ1bGUgPSBhY2xibGstXFx1MDAzZXJ1bGVzW2pdO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFhY2xydWxlKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0a3ZmcmVlKGFjbHJ1bGUpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGt2ZnJlZShhY2xibGspO1xcbitcXHR9XFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB5dDkyeHhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHl0OTJ4eF9jaGlwX2luZm8gKmNvbXBhdF9pbmZvID0gTlVMTDtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2O1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XFxuK1xcbitcXHRjb21wYXRfaW5mbyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xcbitcXHRpZiAoIWNvbXBhdF9pbmZvKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdG1kaW8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1kaW8pLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFtZGlvKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdG1kaW8tXFx1MDAzZWJ1cyA9IG1kaW9kZXYtXFx1MDAzZWJ1cztcXG4rXFx0bWRpby1cXHUwMDNlYWRkciA9IG1kaW9kZXYtXFx1MDAzZWFkZHI7XFxuK1xcdG1kaW8tXFx1MDAzZXN3aXRjaGlkID0gMDtcXG4rXFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWNoaXBfaW5mbyA9IGNvbXBhdF9pbmZvO1xcbitcXHRwcml2LVxcdTAwM2VyZWdfb3BzID0gXFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XFxuK1xcdHByaXYtXFx1MDAzZXJlZ19jdHggPSBtZGlvO1xcbitcXG4rXFx0ZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuK1xcdGRzLVxcdTAwM2VkZXYgPSBkZXY7XFxuK1xcdGRzLVxcdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XFxuK1xcdGRzLVxcdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xcbitcXHRkcy1cXHUwMDNlcHJpdiA9IHByaXY7XFxuK1xcdGRzLVxcdTAwM2VvcHMgPSBjb21wYXRfaW5mby1cXHUwMDNlc3dpdGNoX29wcztcXG4rXFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21pbiA9IGNvbXBhdF9pbmZvLVxcdTAwM2VhZ2VpbmdfdGltZV9taW47XFxuK1xcdGRzLVxcdTAwM2VhZ2VpbmdfdGltZV9tYXggPSBjb21wYXRfaW5mby1cXHUwMDNlYWdlaW5nX3RpbWVfbWF4O1xcbitcXHRkcy1cXHUwMDNlcGh5bGlua19tYWNfb3BzID0gY29tcGF0X2luZm8tXFx1MDAzZW1hY19vcHM7XFxuK1xcdGRzLVxcdTAwM2VudW1fbGFnX2lkcyA9IGNvbXBhdF9pbmZvLVxcdTAwM2VsYWdfaWQ7XFxuK1xcdGRzLVxcdTAwM2VudW1fcG9ydHMgPSBjb21wYXRfaW5mby1cXHUwMDNlcG9ydHM7XFxuK1xcbitcXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIHByaXYpO1xcbitcXG4rXFx0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyeHhfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0e1xcbitcXHRcXHQuY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIixcXG4rXFx0XFx0LmRhdGEgPSBcXHUwMDI2eXQ5Mnh4X2NoaXBfaW5mb190YWJsZVtZVDkyMTVdLFxcbitcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5jb21wYXRpYmxlID0gXFxcIm1vdG9yY29tbSx5dDkyMjRcXFwiLFxcbitcXHRcXHQuZGF0YSA9IFxcdTAwMjZ5dDkyeHhfY2hpcF9pbmZvX3RhYmxlW1lUOTIyNF0sXFxuK1xcdH0sXFxuIFxcdHt9XFxuIH07XFxuLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTIxeF9vZl9tYXRjaCk7XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTJ4eF9vZl9tYXRjaCk7XFxuIFxcbi1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcXG4tXFx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXFxuLVxcdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXFxuLVxcdC5zaHV0ZG93biA9IHl0OTIxeF9tZGlvX3NodXRkb3duLFxcbitzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTJ4eF9tZGlvX2RyaXZlciA9IHtcXG4rXFx0LnByb2JlID0geXQ5Mnh4X21kaW9fcHJvYmUsXFxuK1xcdC5yZW1vdmUgPSB5dDkyeHhfbWRpb19yZW1vdmUsXFxuK1xcdC5zaHV0ZG93biA9IHl0OTJ4eF9tZGlvX3NodXRkb3duLFxcbiBcXHQubWRpb2Rydi5kcml2ZXIgPSB7XFxuLVxcdFxcdC5uYW1lID0gWVQ5MjFYX05BTUUsXFxuLVxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IHl0OTIxeF9vZl9tYXRjaCxcXG4rXFx0XFx0Lm5hbWUgPSBZVDkyWFhfTkFNRSxcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0geXQ5Mnh4X29mX21hdGNoLFxcbiBcXHR9LFxcbiB9O1xcbiBcXG4tbWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XFxuK21kaW9fbW9kdWxlX2RyaXZlcih5dDkyeHhfbWRpb19kcml2ZXIpO1xcbiBcXG4gTU9EVUxFX0FVVEhPUihcXFwiRGF2aWQgWWFuZyBcXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbi1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIkRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBTd2l0Y2hcXFwiKTtcXG4rTU9EVUxFX0FVVEhPUihcXFwiS3lsZSBTd2l0Y2ggXFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBhbmQgWVQ5MjJ4IFN3aXRjaFxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxcbmluZGV4IDVmM2I5OWUxODljNDEuLjAzMDhlNmI5MTYxOGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxuQEAgLTgzNyw2ICs4MzcsNyBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcXG4gXFxuICNkZWZpbmUgWVQ5MjE1X01BSk9SXFx0MHg5MDAyXFxuICNkZWZpbmUgWVQ5MjE4X01BSk9SXFx0MHg5MDAxXFxuKyNkZWZpbmUgWVQ5MjI0X01BSk9SXFx0MHg5MDA0XFxuIFxcbiAvKiByZXF1aXJlZCBmb3IgYSBoYXJkIHJlc2V0ICovXFxuICNkZWZpbmUgWVQ5MjFYX1JTVF9ERUxBWV9VU1xcdDEwMDAwXFxuQEAgLTg1Myw2ICs4NTQsOTYgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XFxuIC8qIDggaW50ZXJuYWwgKyAyIGV4dGVybmFsICsgMSBtY3UgKi9cXG4gI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cXHRcXHRcXHQxMVxcbiBcXG4rLyogeXQ5MjJ4IHJlZ2lzdGVyIGxpc3RzICovXFxuKyNkZWZpbmUgWVQ5MlhYX1BBR0VfU0VMRUNUXFx0MHgxZVxcbisjZGVmaW5lIFlUOTJYWF9QQUdFXFx0XFx0MHgxZlxcbisjZGVmaW5lIFlUOTIyWF9QT1JUbl9DVFJMKHBvcnQpICAgICAgICAgICAgICAgICgweDgwMDgwICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9DVFJMX1BBVVNFX0FOICAgICAgQklUKDEwKVxcbisjZGVmaW5lIFlUOTIyWF9QT1JUbl9TVEFUVVMocG9ydCkgICAgICAoMHg4MDIwMCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgWVQ5MjJYX0VOX1BIWV9PVkVSV1JJVEUgICAoMHg4MDA0MClcXG4rI2RlZmluZSBZVDkyMlhfRU5fUEhZX1ZBTFVFICAgICAgICgweDgwMDNjKVxcbisvKiBDVFJMOiBmb3JjZSBvcCB0byBtYWtlIHNvZnQgY29uZmlndXJhdGlvbiBlZmZlY3RpdmUgKi9cXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9GT1JDRV9PUCAgICAgICAgICAgQklUKDE0KVxcbisjZGVmaW5lIFlUOTIyWF9QT1JUX0NGR19UWF9FTiAgICAgICBCSVQoMTMpXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfQ0ZHX1JYX0VOICAgICAgIEJJVCgxMilcXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9GQ19BTiAgICAgICAgICAgIEJJVCgxMSlcXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9MSU5LX0FOICAgICAgICAgICAgQklUKDEwKSAgLyogQ1RSTDogYXV0byBuZWdvdGlhdGlvbiAqL1xcbisjZGVmaW5lIFlUOTIyWF9QT1JUX0xJTksgICAgICAgICAgICAgICBCSVQoOSkgIC8qIENUUkw6IGxpbmsgc3RhdHVzICovXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfSEFMRl9QQVVTRSAgICAgICAgIEJJVCg4KSAgLyogSGFsZi1kdXBsZXggYmFjayBwcmVzc3VyZSBtb2RlICovXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfRFVQTEVYX0ZVTEwgICAgICAgICAgICAgICAgQklUKDcpXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfUlhfUEFVU0UgICAgICAgICAgIEJJVCg2KVxcbisjZGVmaW5lIFlUOTIyWF9QT1JUX1RYX1BBVVNFICAgICAgICAgICBCSVQoNSlcXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9SWF9NQUNfRU4gICAgICAgICAgQklUKDQpXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfVFhfTUFDX0VOICAgICAgICAgIEJJVCgzKVxcbisjZGVmaW5lIFlUOTIyWF9QT1JUX1NQRUVEX00gICAgICAgICAgICBHRU5NQVNLKDIsIDApXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfU0RTX01PREUgICAgICAgICAgIDB4NDAwXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfU0RTX01PREVfTSAgICAgICAgIEdFTk1BU0soNiwgNClcXG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfU0dNSUkgICAgICAgICAgICAgICAgICAgICAgIDBcXG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfUkVWU0dNSUkgICAgICAgICAgICAgICAgICAgIDFcXG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfMTAwMEJBU0VYICAgICAgICAgICAgICAgICAgIDJcXG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfMTAwQkFTRVggICAgICAgICAgICAgICAgICAgIDNcXG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfMjUwMEJBU0VYICAgICAgICAgICAgICAgICAgIDRcXG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfVVNYR01JSSAgICAgICAgICAgICAgICAgICAgIDZcXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9OVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOVxcbisvKiBMQUcgKi9cXG4rI2RlZmluZSBZVDkyMlhfTEFHX05VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDRcXG4rLyogSVNPICovXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRuX0lTT0xBVElPTihwb3J0KSAgICAgICAgICAgKDB4NCAqIChwb3J0KSArIDB4MTgwZDgwKVxcbisvKiBGREIgKi9cXG4rI2RlZmluZSBZVDkyMlhfUE9SVG5fTEVBUk4ocG9ydCkgICAgICAgKDB4MTgwMzAwICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9MRUFSTl9ESVMgICAgICAgICAgQklUKDE4KVxcbisvKiBHTE9CQUwgQ1RSTCAqL1xcbisjZGVmaW5lICBZVDkyMlhfRlVOQ19BQ0wgICAgICAgICAgICAgICBCSVQoNSlcXG4rI2RlZmluZSAgWVQ5MjJYX0ZVTkNfTUlCICAgICAgICAgICAgICAgQklUKDQpXFxuKy8qIENUUkwgUEtUICovXFxuKyNkZWZpbmUgWVQ5MjJYX0ZJTFRFUl9VTktfVUNBU1QgICAgICAgICAgICAgICAgICAgICAgICAweDE4MGVjOFxcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX1VDQVNUICAgICAgICAgICAgICAgICAgIDB4MTgwZWQ4XFxuKyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfTUNBU1QgICAgICAgICAgICAgICAgICAgMHgxODBlZTBcXG4rI2RlZmluZSBZVDkyMlhfQUNUX1VOS19NQ0FTVF9CWVBBU1NfRFJPUF9QSU0gICBCSVQoMjIpXFxuKyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfTUNBU1RfQllQQVNTX0RST1BfTUxEICAgQklUKDIxKVxcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX01DQVNUX0JZUEFTU19EUk9QX0lHTVAgIEJJVCgyMClcXG4rI2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX00ocG9ydCkgICAgICAgICAgICBHRU5NQVNLKDIgKiAocG9ydCkgKyAxLCAyICogKHBvcnQpKVxcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX0FDVG4ocG9ydCwgeCkgICAgICAgICAgICgoeCkgXFx1MDAzY1xcdTAwM2MgKDIgKiAocG9ydCkpKVxcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX0FDVG5fRk9SV0FSRChwb3J0KSAgICAgIFlUOTIyWF9BQ1RfVU5LX0FDVG4ocG9ydCwgMCkgIC8qIGZsb29kICovXFxuKyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfQUNUbl9UUkFQKHBvcnQpICAgICAgICAgWVQ5MjJYX0FDVF9VTktfQUNUbihwb3J0LCAzKSAgLyogc3RlZXIgdG8gQ1BVICovXFxuKyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfQUNUbl9EUk9QKHBvcnQpICAgICAgICAgWVQ5MjJYX0FDVF9VTktfQUNUbihwb3J0LCAxKSAgLyogZGlzY2FyZCAqL1xcbisvKiBORVZFUiB1c2UgdGhpcyBhY3Rpb247IHNlZSBjb21tZW50cyBpbiB0aGUgdGFnIGRyaXZlciAqL1xcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX0FDVG5fQ09QWShwb3J0KSAgICAgICAgIFlUOTIyWF9BQ1RfVU5LX0FDVG4ocG9ydCwgMikgIC8qIGZsb29kIGFuZCBjb3B5ICovXFxuK1xcbisvKiBDUFUgUE9SVCAqL1xcbisjZGVmaW5lIFlUOTIyWF9DUFVfQ09QWVxcdFxcdFxcdDB4MTgxMTAwXFxuKyNkZWZpbmUgWVQ5MjJYX0NQVV9DT1BZX1RPX0lOVF9DUFVcXHRCSVQoMSlcXG4rI2RlZmluZSBZVDkyMlhfQ1BVX0NPUFlfVE9fRVhUX0NQVVxcdEJJVCgwKVxcbisjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1JYX0NUUkxcXHRcXHQweDgwNTA0XFxuKyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfUlhfTU9ERVxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1RYX0NUUkxcXHRcXHQweDEwMDcxMFxcbisjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1RYX1RZUEVcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDkyMlhfQ1BVX1RBR19UWF9NT0RFXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfQ1RBR19PUFxcdEJJVCgyKVxcbisjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1RYX1NUQUdfT1BcXHRCSVQoMylcXG4rXFxuK2VudW0geXQ5MjJ4X3BoeV9yZWdfdHlwZSB7XFxuK1xcdFlUOTIyWF9QSFlfUkVHX1RZUEVfQ09NTU9OX0VYVCxcXG4rXFx0WVQ5MjJYX1BIWV9SRUdfVFlQRV9QSFlfQ09NTU9OX0VYVCxcXG4rXFx0WVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVCxcXG4rXFx0WVQ5MjJYX1BIWV9SRUdfVFlQRV9NSUksXFxuK1xcdFlUOTIyWF9QSFlfUkVHX1RZUEVfRVhULFxcbitcXHRZVDkyMlhfUEhZX1JFR19UWVBFX01NRDEsXFxuK1xcdFlUOTIyWF9QSFlfUkVHX1RZUEVfTU1EMyxcXG4rXFx0WVQ5MjJYX1BIWV9SRUdfVFlQRV9NTUQ3LFxcbitcXHRZVDkyMlhfUEhZX1JFR19UWVBFX01BWFxcbit9O1xcbitcXG4rZW51bSB5dDkyMnhfcGh5X3JlZ19zcGFjZSB7XFxuK1xcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1BIWSxcXG4rXFx0WVQ5MjJYX1BIWV9SRUdfU1BBQ0VfUEhZX1QxLFxcbitcXHRZVDkyMlhfUEhZX1JFR19TUEFDRV9QSFlfTERTLFxcbitcXHRZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSxcXG4rXFx0WVQ5MjJYX1BIWV9SRUdfU1BBQ0VfVVNYR01JSSxcXG4rXFx0WVQ5MjJYX1BIWV9SRUdfU1BBQ0VfUVNHTUlJLFxcbitcXHRZVDkyMlhfUEhZX1JFR19TUEFDRV9NQVhcXG4rfTtcXG4rXFxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcXHUwMDNjIDgpXFxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKChwb3J0KSA9PSA4IHx8IChwb3J0KSA9PSA5KVxcbiBcXG5AQCAtOTQ1LDkgKzEwMzYsMjYgQEAgc3RydWN0IHl0OTIxeF9yZWdfb3BzIHtcXG4gXFx0aW50ICgqd3JpdGUpKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiB2YWwpO1xcbiB9O1xcbiBcXG4rZW51bSB5dDkyeHhfbW9kZSB7XFxuK1xcdFlUOTIxNSxcXG4rXFx0WVQ5MjI0LFxcbit9O1xcbitcXG4rc3RydWN0IHl0OTJ4eF9jaGlwX2luZm8ge1xcbitcXHRlbnVtIHl0OTJ4eF9tb2RlIG1vZGU7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdHVuc2lnbmVkIGludCBwb3J0cztcXG4rXFx0dW5zaWduZWQgaW50IGxhZ19pZDtcXG4rXFx0dW5zaWduZWQgaW50IGFnZWluZ190aW1lX21pbjtcXG4rXFx0dW5zaWduZWQgaW50IGFnZWluZ190aW1lX21heDtcXG4rXFx0Y29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzICpzd2l0Y2hfb3BzO1xcbitcXHRjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzICptYWNfb3BzO1xcbit9O1xcbitcXG4gc3RydWN0IHl0OTIxeF9wcml2IHtcXG4gXFx0c3RydWN0IGRzYV9zd2l0Y2ggZHM7XFxuIFxcbitcXHRjb25zdCBzdHJ1Y3QgeXQ5Mnh4X2NoaXBfaW5mbyAqY2hpcF9pbmZvO1xcbiBcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm87XFxuIFxcdHVuc2lnbmVkIGludCBtZXRlcl9zbG90X25zO1xcbiBcXHR1bnNpZ25lZCBpbnQgcG9ydF9zaGFwZV9zbG90X25zO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXFxuaW5kZXggNmY3ZjVjMTdiNTMyMC4uMGMwMzNjYTY1YjkyMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oXFxuQEAgLTYwLDYgKzYwLDcgQEAgc3RydWN0IHRjX2FjdGlvbjtcXG4gI2RlZmluZSBEU0FfVEFHX1BST1RPX01YTDg2Ml9WQUxVRVxcdFxcdDMyXFxuICNkZWZpbmUgRFNBX1RBR19QUk9UT19ORVRDX1ZBTFVFXFx0XFx0MzNcXG4gI2RlZmluZSBEU0FfVEFHX1BST1RPX0tTWjg0NjNfVkFMVUVcXHRcXHQzNFxcbisjZGVmaW5lIERTQV9UQUdfUFJPVE9fWVQ5MjJYX1ZBTFVFICAgICAgICAgICAgICAzNVxcbiBcXG4gZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcXG4gXFx0RFNBX1RBR19QUk9UT19OT05FXFx0XFx0PSBEU0FfVEFHX1BST1RPX05PTkVfVkFMVUUsXFxuQEAgLTk3LDYgKzk4LDcgQEAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcXG4gXFx0RFNBX1RBR19QUk9UT19NWEw4NjJcXHRcXHQ9IERTQV9UQUdfUFJPVE9fTVhMODYyX1ZBTFVFLFxcbiBcXHREU0FfVEFHX1BST1RPX05FVENcXHRcXHQ9IERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRSxcXG4gXFx0RFNBX1RBR19QUk9UT19LU1o4NDYzXFx0XFx0PSBEU0FfVEFHX1BST1RPX0tTWjg0NjNfVkFMVUUsXFxuK1xcdERTQV9UQUdfUFJPVE9fWVQ5MjJYXFx0XFx0PSBEU0FfVEFHX1BST1RPX1lUOTIyWF9WQUxVRSxcXG4gfTtcXG4gXFxuIHN0cnVjdCBkc2Ffc3dpdGNoO1xcbmRpZmYgLS1naXQgYS9uZXQvZHNhL0tjb25maWcgYi9uZXQvZHNhL0tjb25maWdcXG5pbmRleCBkNWU3MjViOTBkNzg1Li5lNGZkM2E5YTY2MjExIDEwMDY0NFxcbi0tLSBhL25ldC9kc2EvS2NvbmZpZ1xcbisrKyBiL25ldC9kc2EvS2NvbmZpZ1xcbkBAIC0yMTUsMTAgKzIxNSwxMCBAQCBjb25maWcgTkVUX0RTQV9UQUdfWFJTNzAwWFxcbiBcXHQgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRhZ2dpbmcgZnJhbWVzIGZvclxcbiBcXHQgIEFycm93IFNwZWVkQ2hpcHMgWFJTNzAweCBzd2l0Y2hlcyB0aGF0IHVzZSBhIHNpbmdsZSBieXRlIHRhZyB0cmFpbGVyLlxcbiBcXG4tY29uZmlnIE5FVF9EU0FfVEFHX1lUOTIxWFxcbi1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlc1xcXCJcXG4rY29uZmlnIE5FVF9EU0FfVEFHX1lUOTJYWFxcbitcXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBhbmQgWVQ5MjJ4IHN3aXRjaGVzXFxcIlxcbiBcXHRoZWxwXFxuIFxcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yXFxuLVxcdCAgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlcy5cXG4rXFx0ICBNb3RvcmNvbW0gWVQ5MjF4IGFuZCBZVDkyMnggc3dpdGNoZXMuXFxuIFxcbiBlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvZHNhL01ha2VmaWxlIGIvbmV0L2RzYS9NYWtlZmlsZVxcbmluZGV4IGI4YzI2NjdjZDE0YWEuLjJkNzJhMjVmZDk4NDYgMTAwNjQ0XFxuLS0tIGEvbmV0L2RzYS9NYWtlZmlsZVxcbisrKyBiL25ldC9kc2EvTWFrZWZpbGVcXG5AQCAtNDIsNyArNDIsNyBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfU0pBMTEwNSkgKz0gdGFnX3NqYTExMDUub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfVFJBSUxFUikgKz0gdGFnX3RyYWlsZXIub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfVlNDNzNYWF84MDIxUSkgKz0gdGFnX3ZzYzczeHhfODAyMXEub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfWFJTNzAwWCkgKz0gdGFnX3hyczcwMHgub1xcbi1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfWVQ5MjFYKSArPSB0YWdfeXQ5MjF4Lm9cXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1lUOTJYWCkgKz0gdGFnX3l0OTIxeC5vXFxuIFxcbiAjIGZvciB0cmFjaW5nIGZyYW1ld29yayB0byBmaW5kIHRyYWNlLmhcXG4gQ0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfeXQ5MjF4LmMgYi9uZXQvZHNhL3RhZ195dDkyMXguY1xcbmluZGV4IDI5NDc4NGFiNjY5NGIuLmEzMDEyZWMzOTg2ODYgMTAwNjQ0XFxuLS0tIGEvbmV0L2RzYS90YWdfeXQ5MjF4LmNcXG4rKysgYi9uZXQvZHNhL3RhZ195dDkyMXguY1xcbkBAIC0xLDggKzEsMTAgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gLypcXG4gICogTW90b3Jjb21tIFlUOTIxeCBTd2l0Y2ggRXh0ZW5kZWQgQ1BVIFBvcnQgVGFnZ2luZ1xcbisgKiBNb3RvcmNvbW0gWVQ5MjJ4IFN3aXRjaCBFeHRlbmRlZCBDUFUgUG9ydCBUYWdnaW5nXFxuICAqXFxuICAqIENvcHlyaWdodCAoYykgMjAyNSBEYXZpZCBZYW5nIFxcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBLeWxlIHN3aXRjaCBcXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuICAqXFxuICAqICstLS0tKy0tLS0rLS0tLS0tLSstLS0tLSstLS0tKy0tLS0tLS0tLVxcbiAgKiB8IERBIHwgU0EgfCBUYWdFVCB8IFRhZyB8IEVUIHwgUGF5bG9hZCAuLi5cXG5AQCAtMTY2LDggKzE2OCwxMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyB5dDkyMXhfbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5lZWRlZF9oZWFkcm9vbSA9IFlUOTIxWF9UQUdfTEVOLFxcbiB9O1xcbiBcXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJEU0EgdGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlc1xcXCIpO1xcbi1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuK0RTQV9UQUdfRFJJVkVSKHl0OTIxeF9uZXRkZXZfb3BzKTtcXG4gTU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fWVQ5MjFYLCBZVDkyMVhfVEFHX05BTUUpO1xcbiBcXG4tbW9kdWxlX2RzYV90YWdfZHJpdmVyKHl0OTIxeF9uZXRkZXZfb3BzKTtcXG4rLyogVG8gZGVmaW5lIHRoZSBmcm9tIGNwdSB0YWcgZm9ybWF0IDggYnl0ZXM6XFxuKyAqXFxuKyAqIDAgMSAyIDMgNCA1IDYgNyB8MCAxIDIgMyA0IDUgNiA3XFxuKyAqfFxcdTAwM2MtLS0tLS0tLS0tLS1UUElEIDB4OTk4OC0tLS0tLS1cXHUwMDNlfFxcbisgKnxcXHUwMDNjLS1SRVNFUlZFLS1cXHUwMDNlfFxcdTAwM2MtLS0tLURTVCBQT1ItLS0tXFx1MDAzZXxcXG4rICp8LXxcXHUwMDNjLS0tLS0tLS0tUkVTRVJWRS0tLS0tLS0tLS0tLVxcdTAwM2V8XFxuKyAqfFxcdTAwM2MtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXHUwMDNlfFxcbisgKi9cXG4rI2RlZmluZSBZVDkyMlhfVEFHX05BTUVcXHRcXHRcXHRcXFwieXQ5MjJ4XFxcIlxcbisjZGVmaW5lIFlUOTIyWF9UQUdfUE9SVE1BU0tfMFxcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSBZVDkyMlhfVEFHX1BPUlRNQVNLX01cXHRcXHRHRU5NQVNLKDgsIDApXFxuKyNkZWZpbmUgWVQ5MjJYX1RBR19QT1JUUyh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjJYX1RBR19QT1JUTUFTS19NLCAoeCkpXFxuKyNkZWZpbmUgWVQ5MjJYX1RBR19GT1JDRV9EU1RcXHRcXHRCSVQoOSlcXG4rI2RlZmluZSBZVDkyMlhfVEFHX1BSSU9fTVxcdFxcdEdFTk1BU0soMTIsIDEwKVxcbisjZGVmaW5lIFlUOTIyWF9UQUdfUFJJT19FTlxcdFxcdEJJVCgxMylcXG4rI2RlZmluZSBZVDkyMlhfVEFHX1BSSU8oeClcXHRcXHQoRklFTERfUFJFUChZVDkyMlhfVEFHX1BSSU9fTSwgKHgpKSB8IFlUOTIyWF9UQUdfUFJJT19FTilcXG4rI2RlZmluZSBZVDkyMlhfVEFHX1JYX1BPUlRfTVxcdFxcdEdFTk1BU0soNSwgMilcXG4rI2RlZmluZSBZVDkyMlhfVEFHX1JYX1BSSU9fTVxcdFxcdEdFTk1BU0soMTUsIDEzKVxcbitcXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpcXG4reXQ5MjJ4X3RhZ194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQobmV0ZGV2KTtcXG4rXFx0X19iZTE2ICp0YWc7XFxuK1xcdHUxNiBjdHJsO1xcbitcXG4rXFx0c2tiX3B1c2goc2tiLCBZVDkyMVhfVEFHX0xFTik7XFxuK1xcdGRzYV9hbGxvY19ldHlwZV9oZWFkZXIoc2tiLCBZVDkyMVhfVEFHX0xFTik7XFxuK1xcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3R4KHNrYik7XFxuK1xcbitcXHR0YWdbMF0gPSBodG9ucyhFVEhfUF9ZVDkyMVgpO1xcbitcXHRpZiAoZHAtXFx1MDAzZWluZGV4ICE9IDApIHtcXG4rXFx0XFx0LyogUG9ydCBpbmRleCBpcyBub3QgZXF1YWwgMCBpbiB0YWdbMV0gKi9cXG4rXFx0XFx0Y3RybCA9IFlUOTIyWF9UQUdfUFJJTyhza2ItXFx1MDAzZXByaW9yaXR5KSB8IFlUOTIyWF9UQUdfRk9SQ0VfRFNUIHxcXG4rXFx0XFx0XFx0WVQ5MjJYX1RBR19QT1JUUyhkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBuZXRkZXYpIC0gMSk7XFxuK1xcdFxcdHRhZ1sxXSA9IGh0b25zKGN0cmwpO1xcbitcXHRcXHR0YWdbMl0gPSAwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBQb3J0IDAgaW4gYml0MTUgaW4gdGFnWzJdICovXFxuK1xcdFxcdGN0cmwgPSBZVDkyMlhfVEFHX1BSSU8oc2tiLVxcdTAwM2Vwcmlvcml0eSkgfCBZVDkyMlhfVEFHX0ZPUkNFX0RTVDtcXG4rXFx0XFx0dGFnWzFdID0gaHRvbnMoY3RybCk7XFxuK1xcdFxcdGN0cmwgPSBZVDkyMlhfVEFHX1BPUlRNQVNLXzA7XFxuK1xcdFxcdHRhZ1syXSA9IGh0b25zKGN0cmwpO1xcbitcXHR9XFxuK1xcdHRhZ1szXSA9IDA7XFxuK1xcbitcXHRyZXR1cm4gc2tiO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxcbit5dDkyMnhfdGFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBwb3J0O1xcbitcXHRfX2JlMTYgKnRhZztcXG4rXFx0dTE2IHJ4O1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgWVQ5MjFYX1RBR19MRU4pKSkge1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7XFxuK1xcbitcXHRpZiAodW5saWtlbHkodGFnWzBdICE9IGh0b25zKEVUSF9QX1lUOTIxWCkpKSB7XFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKFxcdTAwMjZuZXRkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiVW5leHBlY3RlZCBFdGhlclR5cGUgMHglMDR4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIG50b2hzKHRhZ1swXSkpO1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIExvY2F0ZSB3aGljaCBwb3J0IHRoaXMgaXMgY29taW5nIGZyb20gKi9cXG4rXFx0cnggPSBudG9ocyh0YWdbMl0pO1xcbitcXHRwb3J0ID0gRklFTERfR0VUKFlUOTIyWF9UQUdfUlhfUE9SVF9NLCByeCk7XFxuK1xcdHNrYi1cXHUwMDNlZGV2ID0gZHNhX2NvbmR1aXRfZmluZF91c2VyKG5ldGRldiwgMCwgcG9ydCk7XFxuK1xcdGlmICh1bmxpa2VseSghc2tiLVxcdTAwM2VkZXYpKSB7XFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKFxcdTAwMjZuZXRkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiQ291bGRuJ3QgZGVjb2RlIHNvdXJjZSBwb3J0ICV1XFxcXG5cXFwiLCBwb3J0KTtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHQvKiBSZW1vdmUgdGFnIGFuZCB1cGRhdGUgY2hlY2tzdW0gKi9cXG4rXFx0c2tiX3B1bGxfcmNzdW0oc2tiLCBZVDkyMVhfVEFHX0xFTik7XFxuK1xcdGRzYV9zdHJpcF9ldHlwZV9oZWFkZXIoc2tiLCBZVDkyMVhfVEFHX0xFTik7XFxuK1xcbitcXHRyZXR1cm4gc2tiO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIHl0OTIyeF9uZXRkZXZfb3BzID0ge1xcbitcXHQubmFtZSAgID0gWVQ5MjJYX1RBR19OQU1FLFxcbitcXHQucHJvdG8gID0gRFNBX1RBR19QUk9UT19ZVDkyMlgsXFxuK1xcdC54bWl0ICAgPSB5dDkyMnhfdGFnX3htaXQsXFxuK1xcdC5yY3YgICAgPSB5dDkyMnhfdGFnX3JjdixcXG4rXFx0Lm5lZWRlZF9oZWFkcm9vbSA9IFlUOTIxWF9UQUdfTEVOLFxcbit9O1xcbitcXG4rRFNBX1RBR19EUklWRVIoeXQ5MjJ4X25ldGRldl9vcHMpO1xcbitNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19ZVDkyMlgsIFlUOTIyWF9UQUdfTkFNRSk7XFxuK1xcbitzdGF0aWMgc3RydWN0IGRzYV90YWdfZHJpdmVyICpkc2FfdGFnX2RyaXZlcl9hcnJheVtdID0ge1xcbitcXHRcXHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRSh5dDkyMXhfbmV0ZGV2X29wcyksXFxuK1xcdFxcdTAwMjZEU0FfVEFHX0RSSVZFUl9OQU1FKHl0OTIyeF9uZXRkZXZfb3BzKSxcXG4rfTtcXG4rbW9kdWxlX2RzYV90YWdfZHJpdmVycyhkc2FfdGFnX2RyaXZlcl9hcnJheSk7XFxuK1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkRTQSB0YWcgZHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IGFuZCBZVDkyMnggc3dpdGNoZXNcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbitcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjE6MjcuMzE1MDU0Njg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTg5MjY3MjE3MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjI0IGV0aGVybmV0IHN3aXRjaCBjaGlwIHRvIHRoZSB5dDkyMXggRFNBIGRyaXZlciBhbmQgYSBjb3JyZXNwb25kaW5nIERTQSB0YWcgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIGFuIE1ESU8gZHJpdmVyIHRoYXQgcmVsaWVzIG9uIERldmljZSBUcmVlIChPRiBtYXRjaCBkYXRhKSB0byBwcm9iZSwgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBvciBkeW5hbWljYWxseSBpbmplY3RhYmxlIGluIHN0YW5kYXJkIHg4Nl82NCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIEZ1cnRoZXJtb3JlLCB0aGUgRFNBIHRhZyBkcml2ZXIgY2Fubm90IGJlIHJlYWNoZWQgYmVjYXVzZSBubyBlbXVsYXRlZCBEU0Egc3dpdGNoIChsaWtlIGRzYV9sb29wKSBjYW4gYmUgY29uZmlndXJlZCB0byB1c2UgdGhlIG5ld2x5IGFkZGVkIERTQV9UQUdfUFJPVE9fWVQ5MjJYIHByb3RvY29sLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZiOTMxZTkwMmYxODFlYTE4MjUwYjU5YWM5NDczODI1ZGQxZjJiMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwMjoyMToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmMuLjY5YzgyNGZkOTViZjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbkBAIC0xNTksMTEgKzE1OSwxMSBAQCBjb25maWcgTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk1cbiBcdCAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXJcbiBcdCAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS5cbiBcbi1jb25maWcgTkVUX0RTQV9ZVDkyMVhcbi1cdHRyaXN0YXRlIFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCJcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbitjb25maWcgTkVUX0RTQV9ZVDkyWFhcbitcdHRyaXN0YXRlIFwiTW90b3Jjb21tIFlUOTIxNSBhbmQgWVQ5MjI0IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcIlxuK1x0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTJYWFxuIFx0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcbiBcdGhlbHBcbi1cdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuK1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgYW5kIFlUOTIyNCBldGhlcm5ldCBzd2l0Y2hcbiBcdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBkMjk3NWJhZGZmYzA5Li4xOGMyY2VlZjA5YTUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNCw3ICsxNCw3IEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSArPSBsYW45MzAzX21kaW8ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgKz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgKz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSArPSB2aXRlc3NlLXZzYzczeHgtc3BpLm9cbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MlhYKSArPSB5dDkyMXgub1xuIG9iai15XHRcdFx0XHQrPSBiNTMvXG4gb2JqLXlcdFx0XHRcdCs9IGhpcnNjaG1hbm4vXG4gb2JqLXlcdFx0XHRcdCs9IGxhbnRpcS9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbmluZGV4IDE1OWIxNjYwNmY2Y2EuLjc0MjU1NWY4NzgxOWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuQEAgLTE0OCwxMCArMTQ4LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXHRcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDgpLFxuIFx0XHRZVDkyMVhfUE9SVF9NQVNLX0VYVDAgfCBZVDkyMVhfUE9SVF9NQVNLX0VYVDEsXG4gXHR9LFxuK1x0e1xuK1x0XHRcIllUOTIyNFwiLCBZVDkyMjRfTUFKT1IsIDAsIDAsXG4rXHRcdDB4MWYxLFxuK1x0XHQweDAsXG4rXHR9LFxuIFx0e31cbiB9O1xuIFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcdFwieXQ5MjF4XCJcbisjZGVmaW5lIFlUOTJYWF9OQU1FXHRcInl0OTJ4eFwiXG4gXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuQEAgLTU2MCwxMCArNTY1LDEyIEBAIHl0OTIxeF9pbnRpZl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxuIHN0YXRpYyBpbnQgeXQ5MjF4X21idXNfaW50X3JlYWQoc3RydWN0IG1paV9idXMgKm1idXMsIGludCBwb3J0LCBpbnQgcmVnKVxuIHtcbiBcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXHUwMDNlcHJpdjtcbitcdGludCBtYXhfcG9ydHM7XG4gXHR1MTYgdmFsO1xuIFx0aW50IHJlcztcbiBcbi1cdGlmIChwb3J0IFx1MDAzZT0gWVQ5MjFYX1BPUlRfTlVNKVxuK1x0bWF4X3BvcnRzID0gcHJpdi1cdTAwM2VjaGlwX2luZm8tXHUwMDNlcG9ydHM7XG4rXHRpZiAocG9ydCBcdTAwM2U9IG1heF9wb3J0cylcbiBcdFx0cmV0dXJuIFUxNl9NQVg7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuQEAgLTU3OSw5ICs1ODYsMTEgQEAgc3RhdGljIGludFxuIHl0OTIxeF9tYnVzX2ludF93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcsIHUxNiBkYXRhKVxuIHtcbiBcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXHUwMDNlcHJpdjtcbitcdGludCBtYXhfcG9ydHM7XG4gXHRpbnQgcmVzO1xuIFxuLVx0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMVhfUE9SVF9OVU0pXG4rXHRtYXhfcG9ydHMgPSBwcml2LVx1MDAzZWNoaXBfaW5mby1cdTAwM2Vwb3J0cztcbitcdGlmIChwb3J0IFx1MDAzZT0gbWF4X3BvcnRzKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5AQCAtNTk2LDE5ICs2MDUsMjEgQEAgeXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqbWJ1cztcbitcdGludCBtYXhfcG9ydHM7XG4gXHRpbnQgcmVzO1xuIFxuIFx0bWJ1cyA9IGRldm1fbWRpb2J1c19hbGxvYyhkZXYpO1xuIFx0aWYgKCFtYnVzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdG1heF9wb3J0cyA9IHByaXYtXHUwMDNlY2hpcF9pbmZvLVx1MDAzZXBvcnRzO1xuIFx0bWJ1cy1cdTAwM2VuYW1lID0gXCJZVDkyMXggaW50ZXJuYWwgTURJTyBidXNcIjtcbiBcdHNucHJpbnRmKG1idXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCIlc1wiLCBkZXZfbmFtZShkZXYpKTtcbiBcdG1idXMtXHUwMDNlcHJpdiA9IHByaXY7XG4gXHRtYnVzLVx1MDAzZXJlYWQgPSB5dDkyMXhfbWJ1c19pbnRfcmVhZDtcbiBcdG1idXMtXHUwMDNld3JpdGUgPSB5dDkyMXhfbWJ1c19pbnRfd3JpdGU7XG4gXHRtYnVzLVx1MDAzZXBhcmVudCA9IGRldjtcbi1cdG1idXMtXHUwMDNlcGh5X21hc2sgPSAodTMyKX5HRU5NQVNLKFlUOTIxWF9QT1JUX05VTSAtIDEsIDApO1xuK1x0bWJ1cy1cdTAwM2VwaHlfbWFzayA9ICh1MzIpfkdFTk1BU0sobWF4X3BvcnRzIC0gMSwgMCk7XG4gXG4gXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuIFx0aWYgKHJlcylcbkBAIC00NzQ4LDYgKzQ3NTksMTMgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7XG4gXHRpbnQgcmVzO1xuIFxuK1x0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbitcbitcdFx0cHAtXHUwMDNlaW5kZXggPSBpO1xuK1x0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcbitcdH1cbitcbiBcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4gXHRyZXMgPSB5dDkyMXhfY2hpcF9yZXNldChwcml2KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbkBAIC00ODY5LDExNCArNDg4Nyw5MzUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XG4gXHQuc2V0dXBcdFx0XHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXG4gfTtcbiBcbi1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4rc3RhdGljIGludCB5dDkyMnhfcG9ydF9kb3duKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXG4ge1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbitcdHUzMiBtYXNrO1xuK1x0aW50IHJlcztcbiBcbi1cdGlmICghcHJpdilcbi1cdFx0cmV0dXJuO1xuK1x0LyogbWFjIGZvcmNlIGRvd24gKi9cbitcdG1hc2sgPSBZVDkyMlhfUE9SVF9MSU5LIHwgWVQ5MjJYX1BPUlRfUlhfTUFDX0VOIHxcbitcdCAgICAgICBZVDkyMlhfUE9SVF9UWF9NQUNfRU4gfCBZVDkyMlhfUE9SVF9MSU5LX0FOO1xuK1x0cmVzID0geXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHByaXYsIFlUOTIyWF9QT1JUbl9DVFJMKHBvcnQpLCBtYXNrKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHQvKiBOZWVkIGZvcmNlIG9wIHRvIG1ha2Ugc29mdCBjb25maWd1cmF0aW9uIGVmZmVjdGl2ZSAqL1xuK1x0bWFzayA9IFlUOTIyWF9QT1JUX0ZPUkNFX09QO1xuK1x0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfUE9SVG5fQ1RSTChwb3J0KSwgbWFzayk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuIFxuLVx0ZHNhX3N3aXRjaF9zaHV0ZG93bihcdTAwMjZwcml2LVx1MDAzZWRzKTtcbitcdC8qIGRpc2FibGUgZW5fcGh5ICovXG4rXHRyZXMgPSB5dDkyMXhfcmVnX2NsZWFyX2JpdHMocHJpdiwgWVQ5MjJYX0VOX1BIWV9WQUxVRSwgQklUKHBvcnQpKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfT1ZFUldSSVRFLCBCSVQocG9ydCkpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuK3N0YXRpYyB2b2lkXG4reXQ5MjJ4X3BoeWxpbmtfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG4rXHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuIHtcbi1cdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHAtXHUwMDNlZHMpO1xuK1x0aW50IHBvcnQgPSBkcC1cdTAwM2VpbmRleDtcbitcdGludCByZXM7XG4gXG4tXHRpZiAoIXByaXYpXG4tXHRcdHJldHVybjtcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMnhfcG9ydF9kb3duKHByaXYsIHBvcnQpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuIFxuLVx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGktLSBcdTAwM2UgMDsgKSB7XG4tXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuK1x0aWYgKHJlcylcbitcdFx0ZGV2X2VycihkcC1cdTAwM2Vkcy1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvICVzIHBvcnQgJWQ6ICVpXFxuXCIsIFwiYnJpbmcgZG93blwiLFxuK1x0XHRcdHBvcnQsIHJlcyk7XG4rfVxuIFxuLVx0XHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkKTtcbitzdGF0aWMgaW50XG4reXQ5MjJ4X3BvcnRfdXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IG1vZGUsXG4rXHQgICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwgaW50IHNwZWVkLCBpbnQgZHVwbGV4LFxuK1x0ICAgICAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXG4re1xuK1x0dTMyIG1hc2s7XG4rXHR1MzIgY3RybDtcbitcdGludCByZXM7XG4rXG4rXHRzd2l0Y2ggKHNwZWVkKSB7XG4rXHRjYXNlIFNQRUVEXzEwOlxuK1x0XHRjdHJsID0gWVQ5MjFYX1BPUlRfU1BFRURfMTA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBTUEVFRF8xMDA6XG4rXHRcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBTUEVFRF8xMDAwOlxuK1x0XHRjdHJsID0gWVQ5MjFYX1BPUlRfU1BFRURfMTAwMDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFNQRUVEXzI1MDA6XG4rXHRcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8yNTAwO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU1BFRURfMTAwMDA6XG4rXHRcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDAwMDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbitcdGlmIChkdXBsZXggPT0gRFVQTEVYX0ZVTEwpXG4rXHRcdGN0cmwgfD0gWVQ5MjJYX1BPUlRfRFVQTEVYX0ZVTEw7XG4rXHRpZiAodHhfcGF1c2UpXG4rXHRcdGN0cmwgfD0gWVQ5MjJYX1BPUlRfVFhfUEFVU0U7XG4rXHRpZiAocnhfcGF1c2UpXG4rXHRcdGN0cmwgfD0gWVQ5MjJYX1BPUlRfUlhfUEFVU0U7XG4rXHRjdHJsIHw9IFlUOTIyWF9QT1JUX1JYX01BQ19FTiB8IFlUOTIyWF9QT1JUX1RYX01BQ19FTiB8XG4rXHRcdFlUOTIyWF9QT1JUX0NGR19UWF9FTiB8IFlUOTIyWF9QT1JUX0xJTksgfFxuK1x0XHRZVDkyMlhfUE9SVF9DRkdfUlhfRU47XG4rXHRjdHJsIFx1MDAyNj0gfihZVDkyMlhfUE9SVF9GQ19BTiB8IFlUOTIyWF9QT1JUX0xJTktfQU4pO1xuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUE9SVG5fQ1RSTChwb3J0KSwgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0LyogZm9yY2Ugb3AgKi9cbitcdG1hc2sgPSBZVDkyMlhfUE9SVF9GT1JDRV9PUDtcbitcdHJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCksIG1hc2spO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbiBcbi1cdGRzYV91bnJlZ2lzdGVyX3N3aXRjaChcdTAwMjZwcml2LVx1MDAzZWRzKTtcbitcdC8qIGVuYWJsZSBlbl9waHkgKi9cbitcdHJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjJYX0VOX1BIWV9WQUxVRSwgQklUKHBvcnQpKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfT1ZFUldSSVRFLCBCSVQocG9ydCkpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbiBcbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXHUwMDNlYWNsX2Jsa3MpOyBpKyspIHtcbi1cdFx0c3RydWN0IHl0OTIxeF9hY2xfYmxrICphY2xibGsgPSBwcml2LVx1MDAzZWFjbF9ibGtzW2ldO1xuK1x0cmV0dXJuIDA7XG4rfVxuIFxuLVx0XHRpZiAoIWFjbGJsaylcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0Zm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUoYWNsYmxrLVx1MDAzZXJ1bGVzKTsgaisrKSB7XG4tXHRcdFx0c3RydWN0IHl0OTIxeF9hY2xfcnVsZSAqYWNscnVsZSA9IGFjbGJsay1cdTAwM2VydWxlc1tqXTtcbitzdGF0aWMgdm9pZFxuK3l0OTIyeF9waHlsaW5rX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuK1x0XHRcdCAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHVuc2lnbmVkIGludCBtb2RlLFxuK1x0XHRcdCAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsIGludCBzcGVlZCwgaW50IGR1cGxleCxcbitcdFx0XHQgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxuK3tcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcC1cdTAwM2Vkcyk7XG4rXHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuK1x0aW50IHJlcztcbiBcbi1cdFx0XHRpZiAoIWFjbHJ1bGUpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRrdmZyZWUoYWNscnVsZSk7XG4tXHRcdH1cbi1cdFx0a3ZmcmVlKGFjbGJsayk7XG4tXHR9XG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIyeF9wb3J0X3VwKHByaXYsIHBvcnQsIG1vZGUsIGludGVyZmFjZSwgc3BlZWQsIGR1cGxleCxcbitcdFx0XHQgICAgIHR4X3BhdXNlLCByeF9wYXVzZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRpZiAocmVzKVxuK1x0XHRkZXZfZXJyKGRwLVx1MDAzZWRzLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcXG5cIiwgXCJicmluZyB1cFwiLFxuK1x0XHRcdHBvcnQsIHJlcyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuK3N0YXRpYyBpbnRcbit5dDkyMnhfaW50aWZfZXh0X3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2ICp2YWxwKVxuIHtcbi1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuLVx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcbi1cdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdjtcbi1cdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcbitcdGludCByZXM7XG4gXG4tXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIXByaXYpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMlhfUE9SVF9OVU0pXG4rXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xuLVx0aWYgKCFtZGlvKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBwb3J0LCBZVDkyWFhfUEFHRV9TRUxFQ1QsIHJlZyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuIFxuLVx0bWRpby1cdTAwM2VidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbi1cdG1kaW8tXHUwMDNlYWRkciA9IG1kaW9kZXYtXHUwMDNlYWRkcjtcbi1cdG1kaW8tXHUwMDNlc3dpdGNoaWQgPSAwO1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX3JlYWQocHJpdiwgcG9ydCwgWVQ5MlhYX1BBR0UsIHZhbHApO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbiBcbi1cdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXR1cm4gMDtcbit9XG4gXG4tXHRwcml2LVx1MDAzZXJlZ19vcHMgPSBcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xuLVx0cHJpdi1cdTAwM2VyZWdfY3R4ID0gbWRpbztcbitzdGF0aWMgaW50XG4reXQ5MjF4X2ludGlmX2V4dF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxuK3tcbitcdGludCByZXM7XG4gXG4tXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaSsrKSB7XG4tXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuK1x0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMVhfUE9SVF9OVU0pXG4rXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0XHRwcC1cdTAwM2VpbmRleCA9IGk7XG4tXHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkLCB5dDkyMXhfcG9sbF9taWIpO1xuLVx0fVxuK1x0cmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIHBvcnQsIFlUOTJYWF9QQUdFX1NFTEVDVCwgcmVnKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4gXG4tXHRkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4tXHRkcy1cdTAwM2VkZXYgPSBkZXY7XG4tXHRkcy1cdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XG4tXHRkcy1cdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xuLVx0ZHMtXHUwMDNlcHJpdiA9IHByaXY7XG4tXHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZ5dDkyMXhfZHNhX3N3aXRjaF9vcHM7XG4tXHRkcy1cdTAwM2VhZ2VpbmdfdGltZV9taW4gPSAxICogNTAwMDtcbi1cdGRzLVx1MDAzZWFnZWluZ190aW1lX21heCA9IFUxNl9NQVggKiA1MDAwO1xuLVx0ZHMtXHUwMDNlcGh5bGlua19tYWNfb3BzID0gXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcztcbi1cdGRzLVx1MDAzZW51bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07XG4tXHRkcy1cdTAwM2VudW1fcG9ydHMgPSBZVDkyMVhfUE9SVF9OVU07XG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfd3JpdGUocHJpdiwgcG9ydCwgWVQ5MlhYX1BBR0UsIHZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuIFxuLVx0bWRpb2Rldl9zZXRfZHJ2ZGF0YShtZGlvZGV2LCBwcml2KTtcbitcdHJldHVybiAwO1xuK31cbiBcbi1cdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTtcbitzdGF0aWMgaW50IHl0OTIyeF9pbnRlcm5hbF9waHlhZGRyX2dldChpbnQgcG9ydCxcbitcdFx0XHRcdCAgICAgICBlbnVtIHl0OTIyeF9waHlfcmVnX3R5cGUgcmVnX3R5cGUsXG4rXHRcdFx0XHQgICAgICAgZW51bSB5dDkyMnhfcGh5X3JlZ19zcGFjZSByZWdfc3BhY2UpXG4re1xuK1x0aW50IHJlcztcbitcbitcdGlmIChwb3J0IFx1MDAzZT0gNCBcdTAwMjZcdTAwMjYgcG9ydCBcdTAwM2M9IDcpIHtcbitcdFx0c3dpdGNoIChyZWdfdHlwZSkge1xuK1x0XHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfQ09NTU9OX0VYVDpcbitcdFx0XHRyZXMgPSA5O1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfUEhZX0NPTU1PTl9FWFQ6XG4rXHRcdFx0aWYgKHBvcnQgXHUwMDNjPSA1IFx1MDAyNlx1MDAyNiBwb3J0IFx1MDAzZT0gNClcbitcdFx0XHRcdHJlcyA9IDQ7XG4rXHRcdFx0ZWxzZSBpZiAocG9ydCBcdTAwM2M9IDcgXHUwMDI2XHUwMDI2IHBvcnQgXHUwMDNlPSA2KVxuK1x0XHRcdFx0cmVzID0gNjtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhUOlxuK1x0XHRcdHJlcyA9IC1FSU5WQUw7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0aWYgKHJlZ19zcGFjZSAhPSBZVDkyMlhfUEhZX1JFR19TUEFDRV9QSFkpXG4rXHRcdFx0XHRyZXMgPSAtRUlOVkFMO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocG9ydCA9PSA4KSB7XG4rXHRcdFx0c3dpdGNoIChyZWdfdHlwZSkge1xuK1x0XHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9DT01NT05fRVhUOlxuK1x0XHRcdFx0cmVzID0gOTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVDpcbitcdFx0XHRcdHJlcyA9IDg7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfTUlJOlxuK1x0XHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9FWFQ6XG4rXHRcdFx0XHRpZiAocmVnX3NwYWNlID09IFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJIHx8XG4rXHRcdFx0XHQgICAgcmVnX3NwYWNlID09IFlUOTIyWF9QSFlfUkVHX1NQQUNFX1VTWEdNSUkpXG4rXHRcdFx0XHRcdHJlcyA9IDg7XG4rXHRcdFx0XHRlbHNlXG4rXHRcdFx0XHRcdHJlcyA9IC1FSU5WQUw7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRkZWZhdWx0OlxuK1x0XHRcdFx0cmVzID0gLUVJTlZBTDtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0XHR9XG4rXHRcdHN3aXRjaCAocmVnX3R5cGUpIHtcbitcdFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQ6XG4rXHRcdFx0cmVzID0gOTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhUOlxuK1x0XHRcdHJlcyA9IDA7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9NSUk6XG4rXHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9FWFQ6XG4rXHRcdFx0aWYgKHJlZ19zcGFjZSA9PSBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSB8fFxuK1x0XHRcdCAgICByZWdfc3BhY2UgPT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfVVNYR01JSSlcbitcdFx0XHRcdHJlcyA9IDA7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0cmVzID0gLUVJTlZBTDtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRyZXMgPSAtRUlOVkFMO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmVzO1xuIH1cbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyMXhfb2ZfbWF0Y2hbXSA9IHtcbi1cdHsgLmNvbXBhdGlibGUgPSBcIm1vdG9yY29tbSx5dDkyMTVcIiB9LFxuK3N0YXRpYyBpbnQgeXQ5MjJ4X3BvcnRfc2RzX2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0XHRcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4re1xuK1x0aW50IGFkZHI7XG4rXHR1MTYgZGF0YTtcbitcdGludCByZXM7XG4rXG4rXHRhZGRyID0geXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0KHBvcnQsXG4rXHRcdFx0XHRcdCAgIFlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQsXG4rXHRcdFx0XHRcdCAgIFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJKTtcbitcdGlmIChhZGRyIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdC8qIHdyaXRlIHByb3RlY3QgKi9cbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0YmUsIDB4ZCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0LyogQ0RSICovXG4rXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDBCQVNFWCkge1xuK1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDA2LCAweDApO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MTYsIDB4MzQ1OCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH0gZWxzZSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MDYsIDB4ODAwKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDE2LCAweDQ1NTgpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXHQvKiBQTEwgKi9cbitcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpIHtcbitcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzYSwgMHgxMDA2KTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDNmLCAweDMwMjkpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MmEsIDB4ZjA3MCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH0gZWxzZSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2QsIDB4MjA3ZCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzYywgMHgyMDdkKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDNmLCAweDMwMzIpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2EsIDB4Nik7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQyYSwgMHhmMDcwKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1x0LyogVkNPICovXG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDM5LCAweEMwKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHQvKiBWZGFjICovXG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDkyLCAweDdmN2YpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTEsIDB4N2YpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdC8qIEV5ZSAqL1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ1NCwgMHhmMTQpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTcsIDB4YTQ0KTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NGNkLCAweDApO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0YWYsIDB4NDVlMyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ4YSwgMHhmZmYpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MDgsIDB4N2MwMCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRkNiwgMHg3Zik7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ0ZiwgMHhmZjA4KTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHQvKiBGRkUgKi9cbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OGUsIDB4N2QwMCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweGQsIDB4NjBmKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHQvKiBDVExFICovXG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NGIwLCAweDgwNCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRiMSwgMHg3Nzc0KTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NGFmLCAweDQ1ZTcpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHgzLCAweDU2MDMpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdG1zbGVlcCgyMCk7XG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDkyLCAweDdmZmYpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTIsIDB4N2Y3Zik7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0LyogQ1RMRSAqL1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDIwMDAsIDB4NDApO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHgyMDAwLCAweDApO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHgxMDQyLCAweDQ4Yyk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbisgICAgLyogc29mdCByZXNldCAqL1xuK1x0YWRkciA9IHl0OTIyeF9pbnRlcm5hbF9waHlhZGRyX2dldChwb3J0LCBZVDkyMlhfUEhZX1JFR19UWVBFX01JSSxcbitcdFx0XHRcdFx0ICAgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkpO1xuK1x0aWYgKGFkZHIgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXM7XG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfcmVhZChwcml2LCBhZGRyLCAweDIwMDAsIFx1MDAyNmRhdGEpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdGRhdGEgXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjIDE1KTtcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBhZGRyLCAweDIwMDAsIGRhdGEpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdGFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQocG9ydCwgWVQ5MjJYX1BIWV9SRUdfVFlQRV9NSUksXG4rXHRcdFx0XHRcdCAgIFlUOTIyWF9QSFlfUkVHX1NQQUNFX1VTWEdNSUkpO1xuK1x0aWYgKGFkZHIgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXM7XG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfcmVhZChwcml2LCBhZGRyLCAweDAsIFx1MDAyNmRhdGEpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdGRhdGEgfD0gMSBcdTAwM2NcdTAwM2MgMTU7XG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfd3JpdGUocHJpdiwgYWRkciwgMHgwLCBkYXRhKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIyeF9wb3J0X2NvbmZpZyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgbW9kZSxcbitcdFx0ICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRpbnQgYWRkcjtcbitcdHUxNiBkYXRhO1xuK1x0aW50IHJlcztcbitcbitcdGFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQocG9ydCxcbitcdFx0XHRcdFx0ICAgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVCxcbitcdFx0XHRcdFx0ICAgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkpO1xuK1x0aWYgKGFkZHIgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0c3dpdGNoIChpbnRlcmZhY2UpIHtcbitcdC8qIFNFUkRFUyAqL1xuK1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4rXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDBCQVNFWDpcbitcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDpcbitcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDpcbitcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XG4rXHRcdHJlcyA9IHl0OTIyeF9wb3J0X3Nkc19pbml0KHByaXYsIHBvcnQsIGludGVyZmFjZSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcbitcdFx0YWRkciA9IHl0OTIyeF9pbnRlcm5hbF9waHlhZGRyX2dldFxuK1x0XHRcdChwb3J0LCBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhULFxuK1x0XHRcdCBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSk7XG4rXHRcdGlmIChhZGRyIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRyZXMgPSB5dDkyMnhfaW50aWZfZXh0X3JlYWQocHJpdiwgYWRkciwgWVQ5MjJYX1BPUlRfU0RTX01PREUsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZkYXRhKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1xuK1x0XHRkYXRhIFx1MDAyNj0gKH4weDcgXHUwMDNjXHUwMDNjIDQpO1xuK1x0XHRzd2l0Y2ggKGludGVyZmFjZSkge1xuK1x0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcbitcdFx0XHRkYXRhIHw9IEZJRUxEX1BSRVAoWVQ5MjJYX1BPUlRfU0RTX01PREVfTSxcbitcdFx0XHRcdFx0ICAgWVQ5MlhYX1NFUkRFU19NT0RFX1NHTUlJKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwQkFTRVg6XG4rXHRcdFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXG4rXHRcdFx0XHRcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV8xMDBCQVNFWCk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDpcbitcdFx0XHRkYXRhIHw9IEZJRUxEX1BSRVAoWVQ5MjJYX1BPUlRfU0RTX01PREVfTSxcbitcdFx0XHRcdFx0ICAgWVQ5MlhYX1NFUkRFU19NT0RFXzEwMDBCQVNFWCk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDpcbitcdFx0XHRkYXRhIHw9IEZJRUxEX1BSRVAoWVQ5MjJYX1BPUlRfU0RTX01PREVfTSxcbitcdFx0XHRcdFx0ICAgWVQ5MlhYX1NFUkRFU19NT0RFXzI1MDBCQVNFWCk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XG4rXHRcdFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXG4rXHRcdFx0XHRcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV9VU1hHTUlJKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIFlUOTIyWF9QT1JUX1NEU19NT0RFLFxuK1x0XHRcdFx0XHQgICAgIGRhdGEpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWRcbit5dDkyMnhfcGh5bGlua19tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcbitcdFx0XHQgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcC1cdTAwM2Vkcyk7XG4rXHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMnhfcG9ydF9jb25maWcocHJpdiwgcG9ydCwgbW9kZSwgc3RhdGUtXHUwMDNlaW50ZXJmYWNlKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdGlmIChyZXMpXG4rXHRcdGRldl9lcnIoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxcblwiLCBcImNvbmZpZ1wiLFxuK1x0XHRcdHBvcnQsIHJlcyk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHl0OTIyeF9waHlsaW5rX21hY19vcHMgPSB7XG4rXHQubWFjX2xpbmtfZG93blx0PSB5dDkyMnhfcGh5bGlua19tYWNfbGlua19kb3duLFxuK1x0Lm1hY19saW5rX3VwXHQ9IHl0OTIyeF9waHlsaW5rX21hY19saW5rX3VwLFxuK1x0Lm1hY19jb25maWdcdD0geXQ5MjJ4X3BoeWxpbmtfbWFjX2NvbmZpZyxcbit9O1xuK1xuK3N0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcbit5dDkyMnhfZHNhX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHQgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG0pXG4re1xuK1x0cmV0dXJuIERTQV9UQUdfUFJPVE9fWVQ5MjJYO1xuK31cbitcbitzdGF0aWMgdm9pZFxuK3l0OTIyeF9kc2FfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdCAgICBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4rXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm8gPSBwcml2LVx1MDAzZWluZm87XG4rXG4rXHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyA9IE1BQ19BU1lNX1BBVVNFIHwgTUFDX1NZTV9QQVVTRSB8XG4rXHRcdFx0XHQgICBNQUNfMTAgfCBNQUNfMTAwIHwgTUFDXzEwMDA7XG4rXG4rXHRpZiAoaW5mby1cdTAwM2VpbnRlcm5hbF9tYXNrIFx1MDAyNiBCSVQocG9ydCkpIHtcbitcdFx0aWYgKHBvcnQgXHUwMDNlPSA0IFx1MDAyNlx1MDAyNiBwb3J0IFx1MDAzYz0gNykge1xuK1x0XHRcdC8qIHBvcnQgNCB0byBwb3J0IDcsIGludGVybmFsIHV0cCAqL1xuK1x0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwsXG4rXHRcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzI1MDBGRDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLFxuK1x0XHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuK1x0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwQkFTRVgsXG4rXHRcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsXG4rXHRcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgsXG4rXHRcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzI1MDBGRDtcbitcdFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUksXG4rXHRcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzI1MDBGRDtcbitcdFx0XHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfNTAwMEZEO1xuK1x0XHRcdGNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwMEZEO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBleHRlcm5hbCBwb3J0IHdpbGwgYWRkZWQgbGF0ZXIgKi9cbitcdH1cbit9XG4rXG4rc3RhdGljIGludCB5dDkyMnhfcG9ydF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4rXHR1MzIgbWFzaztcbitcdHUzMiBjdHJsO1xuK1x0aW50IHJlcztcbitcbitcdC8qIGVuYWJsZSB1c2VyIHBvcnQgaXNvbGF0aW9uIGFuZCBkaXNhYmxlIGZkYiBsZWFybmluZyAqL1xuK1x0Y3RybCA9IH5wcml2LVx1MDAzZWNwdV9wb3J0c19tYXNrO1xuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfUE9SVG5fSVNPTEFUSU9OKHBvcnQpLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRtYXNrID0gWVQ5MjJYX1BPUlRfTEVBUk5fRElTO1xuK1x0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfUE9SVG5fTEVBUk4ocG9ydCksIG1hc2spO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHBvcnQpKSB7XG4rXHRcdGN0cmwgPSB+KHUzMikwO1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9QT1JUbl9JU09MQVRJT04ocG9ydCksXG4rXHRcdFx0XHQgICAgICAgY3RybCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHl0OTIyeF9kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjJ4X3BvcnRfc2V0dXAocHJpdiwgcG9ydCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgaW50IHl0OTIyeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1x0Y29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvICppbmZvO1xuK1x0dTMyIGNoaXBpZDtcbitcdHUzMiBtYWpvcjtcbitcdGludCByZXM7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfSUQsIFx1MDAyNmNoaXBpZCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0bWFqb3IgPSBGSUVMRF9HRVQoWVQ5MjFYX0NISVBfSURfTUFKT1IsIGNoaXBpZCk7XG4rXHRmb3IgKGluZm8gPSB5dDkyMXhfaW5mb3M7IGluZm8tXHUwMDNlbmFtZTsgaW5mbysrKVxuK1x0XHRpZiAoaW5mby1cdTAwM2VtYWpvciA9PSBtYWpvcilcbitcdFx0XHRicmVhaztcbitcdGlmICghaW5mby1cdTAwM2VuYW1lKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIlVuZXhwZWN0ZWQgY2hpcGlkIDB4JXhcXG5cIiwgY2hpcGlkKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXHRwcml2LVx1MDAzZWluZm8gPSBpbmZvO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjJ4X2NoaXBfZGV0ZWN0KHByaXYpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdC8qIFJlc2V0ICovXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9SU1QsIFlUOTIxWF9SU1RfSFcpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGZzbGVlcChZVDkyMVhfUlNUX0RFTEFZX1VTKTtcbitcbitcdHZhbCA9IDA7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3dhaXQocHJpdiwgWVQ5MjFYX1JTVCwgfjAsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfc2V0dXBfZHNhKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbit7XG4rXHR1bnNpZ25lZCBsb25nIGNwdV9wb3J0c19tYXNrO1xuK1x0dTMyIGN0cmw7XG4rXHRpbnQgcG9ydDtcbitcdGludCByZXM7XG4rXG4rXHRjdHJsID0gR0VOTUFTSyg5LCAwKTtcbitcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0ZJTFRFUl9VTktfVUNBU1QsIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGN0cmwgPSAwO1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHByaXYtXHUwMDNlY2hpcF9pbmZvLVx1MDAzZXBvcnRzOyBpKyspXG4rXHRcdGN0cmwgfD0gWVQ5MjJYX0FDVF9VTktfQUNUbl9UUkFQKGkpO1xuK1x0Y3B1X3BvcnRzX21hc2sgPSBwcml2LVx1MDAzZWNwdV9wb3J0c19tYXNrO1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChwb3J0LCBcdTAwMjZjcHVfcG9ydHNfbWFzaywgcHJpdi1cdTAwM2VjaGlwX2luZm8tXHUwMDNlcG9ydHMpIHtcbitcdFx0Y3RybCBcdTAwMjY9IH5ZVDkyMlhfQUNUX1VOS19BQ1RuX00ocG9ydCk7XG4rXHRcdGN0cmwgfD0gWVQ5MjJYX0FDVF9VTktfQUNUbl9EUk9QKHBvcnQpO1xuK1x0fVxuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQUNUX1VOS19VQ0FTVCwgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQUNUX1VOS19NQ0FTVCwgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHUzMiBjdHJsO1xuK1x0aW50IHJlcztcbitcbitcdGN0cmwgPSBZVDkyMlhfRlVOQ19NSUIgfCBZVDkyMlhfRlVOQ19BQ0w7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIxWF9GVU5DLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRyZXMgPSB5dDkyMnhfY2hpcF9zZXR1cF9kc2EocHJpdik7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ5MjJ4X2NwdV90YWdfbW9kZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdHUxNiBldGhfcF90YWc7XG4rXHR1MzIgdmFsO1xuK1x0dTMyIHZhbDE7XG4rXHRpbnQgcmVzO1xuK1xuK1x0LyogY3B1IHRhZyBtb2RlIHNldCAqL1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIyWF9DUFVfVEFHX1JYX0NUUkwsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIyWF9DUFVfVEFHX1RYX0NUUkwsIFx1MDAyNnZhbDEpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHZhbCBcdTAwMjY9IH5ZVDkyMlhfQ1BVX1RBR19SWF9NT0RFO1xuK1x0dmFsMSBcdTAwMjY9IH5ZVDkyMlhfQ1BVX1RBR19UWF9NT0RFO1xuK1x0dmFsMSBcdTAwMjY9IH5ZVDkyMlhfQ1BVX1RBR19UWF9UWVBFO1xuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQ1BVX1RBR19SWF9DVFJMLCB2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0NQVV9UQUdfVFhfQ1RSTCwgdmFsMSk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0LyogdHBpZCBjaGVjayAqL1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9DUFVfVEFHX1RQSUQsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0ZXRoX3BfdGFnID0gRklFTERfR0VUKFlUOTIxWF9DUFVfVEFHX1RQSURfVFBJRF9NLCB2YWwpO1xuK1x0aWYgKGV0aF9wX3RhZyAhPSBFVEhfUF9ZVDkyMVgpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiVGFnIHR5cGUgMHgleCAhPSAweCV4XFxuXCIsIGV0aF9wX3RhZyxcbitcdFx0XHRFVEhfUF9ZVDkyMVgpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHl0OTIyeF9jcHVfcG9ydF9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4rXHR1MzIgY3RybDtcbitcdGludCByZXM7XG4rXG4rXHQvKiBjcHUgdGFnIG1vZGUgKi9cbitcdHJlcyA9IHl0OTIyeF9jcHVfdGFnX21vZGVfc2V0KHByaXYpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdC8qIEVuYWJsZSBEU0EgKi9cbitcdHByaXYtXHUwMDNlY3B1X3BvcnRzX21hc2sgPSBkc2FfY3B1X3BvcnRzKGRzKTtcbitcdGN0cmwgPSBZVDkyMVhfRVhUX0NQVV9QT1JUX1RBR19FTiB8IFlUOTIxWF9FWFRfQ1BVX1BPUlRfUE9SVF9FTiB8XG4rXHQgICAgICAgWVQ5MjFYX0VYVF9DUFVfUE9SVF9QT1JUKF9fZmZzKHByaXYtXHUwMDNlY3B1X3BvcnRzX21hc2spKTtcbitcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0VYVF9DUFVfUE9SVCwgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0LyogU2V0dXAgc29mdHdhcmUgc3dpdGNoICovXG4rXHRjdHJsID0gWVQ5MjJYX0NQVV9DT1BZX1RPX0VYVF9DUFU7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9DUFVfQ09QWSwgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludCB5dDkyMnhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZW9mX25vZGU7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMnhfY2hpcF9yZXNldChwcml2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHQvKiBSZWdpc3RlciB0aGUgaW50ZXJuYWwgbWRpbyBidXMuICovXG4rXHRjaGlsZCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcIm1kaW9cIik7XG4rXHRpZiAoY2hpbGQpIHtcbitcdFx0cmVzID0geXQ5MjF4X21idXNfaW50X2luaXQocHJpdiwgY2hpbGQpO1xuK1x0XHRvZl9ub2RlX3B1dChjaGlsZCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdCAvKiBjcHUgcG9ydCBzZXQgKi9cbitcdCBtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0IHJlcyA9IHl0OTIyeF9jcHVfcG9ydF9zZXQocHJpdik7XG4rXHQgbXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMnhfY2hpcF9zZXR1cChwcml2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMnhfZHNhX3N3aXRjaF9vcHMgPSB7XG4rXHQvKiBwb3J0ICovXG4rXHQuZ2V0X3RhZ19wcm90b2NvbFx0PSB5dDkyMnhfZHNhX2dldF90YWdfcHJvdG9jb2wsXG4rXHQucGh5bGlua19nZXRfY2Fwc1x0PSB5dDkyMnhfZHNhX3BoeWxpbmtfZ2V0X2NhcHMsXG4rXHQucG9ydF9zZXR1cFx0XHQ9IHl0OTIyeF9kc2FfcG9ydF9zZXR1cCxcbitcdC8qIGNoaXAgKi9cbitcdC5zZXR1cFx0XHRcdD0geXQ5MjJ4X2RzYV9zZXR1cCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5Mnh4X2NoaXBfaW5mbyB5dDkyeHhfY2hpcF9pbmZvX3RhYmxlW10gPSB7XG4rXHRbWVQ5MjE1XSA9IHtcbitcdFx0Lm1vZGUgPSBZVDkyMTUsXG4rXHRcdC5uYW1lID0gXCJtb3RvcmNvbW0geXQ5MjE1XCIsXG4rXHRcdC5wb3J0cyA9IFlUOTIxWF9QT1JUX05VTSxcbitcdFx0LmxhZ19pZCA9IFlUOTIxWF9MQUdfTlVNLFxuK1x0XHQuYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDAsXG4rXHRcdC5hZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMCxcbitcdFx0LnN3aXRjaF9vcHMgPSBcdTAwMjZ5dDkyMXhfZHNhX3N3aXRjaF9vcHMsXG4rXHRcdC5tYWNfb3BzID0gXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcyxcbitcdH0sXG4rXHRbWVQ5MjI0XSA9IHtcbitcdFx0Lm1vZGUgPSBZVDkyMjQsXG4rXHRcdC5uYW1lID0gXCJtb3RvcmNvbW0geXQ5MjI0XCIsXG4rXHRcdC5wb3J0cyA9IFlUOTIyWF9QT1JUX05VTSxcbitcdFx0LmxhZ19pZCA9IFlUOTIyWF9MQUdfTlVNLFxuK1x0XHQuYWdlaW5nX3RpbWVfbWluID0gMSAqIDYwMDAsXG4rXHRcdC5hZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNjAwMCxcbitcdFx0LnN3aXRjaF9vcHMgPSBcdTAwMjZ5dDkyMnhfZHNhX3N3aXRjaF9vcHMsXG4rXHRcdC5tYWNfb3BzID0gXHUwMDI2eXQ5MjJ4X3BoeWxpbmtfbWFjX29wcyxcbitcdH0sXG4rfTtcbitcbitzdGF0aWMgdm9pZCB5dDkyeHhfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbitcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZHNhX3N3aXRjaF9zaHV0ZG93bihcdTAwMjZwcml2LVx1MDAzZWRzKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgeXQ5Mnh4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpO1xuK1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbitcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG4rXG4rXHRcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHAtXHUwMDNlbWliX3JlYWQpO1xuK1x0fVxuK1xuK1x0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKFx1MDAyNnByaXYtXHUwMDNlZHMpO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2VhY2xfYmxrcyk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgeXQ5MjF4X2FjbF9ibGsgKmFjbGJsayA9IHByaXYtXHUwMDNlYWNsX2Jsa3NbaV07XG4rXG4rXHRcdGlmICghYWNsYmxrKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShhY2xibGstXHUwMDNlcnVsZXMpOyBqKyspIHtcbitcdFx0XHRzdHJ1Y3QgeXQ5MjF4X2FjbF9ydWxlICphY2xydWxlID0gYWNsYmxrLVx1MDAzZXJ1bGVzW2pdO1xuK1xuK1x0XHRcdGlmICghYWNscnVsZSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdGt2ZnJlZShhY2xydWxlKTtcbitcdFx0fVxuK1x0XHRrdmZyZWUoYWNsYmxrKTtcbitcdH1cbitcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ5Mnh4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuK3tcbitcdGNvbnN0IHN0cnVjdCB5dDkyeHhfY2hpcF9pbmZvICpjb21wYXRfaW5mbyA9IE5VTEw7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7XG4rXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG4rXG4rXHRjb21wYXRfaW5mbyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xuK1x0aWYgKCFjb21wYXRfaW5mbylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFtZGlvKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdG1kaW8tXHUwMDNlYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG4rXHRtZGlvLVx1MDAzZWFkZHIgPSBtZGlvZGV2LVx1MDAzZWFkZHI7XG4rXHRtZGlvLVx1MDAzZXN3aXRjaGlkID0gMDtcbitcbitcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRwcml2LVx1MDAzZWNoaXBfaW5mbyA9IGNvbXBhdF9pbmZvO1xuK1x0cHJpdi1cdTAwM2VyZWdfb3BzID0gXHUwMDI2eXQ5MjF4X3JlZ19vcHNfbWRpbztcbitcdHByaXYtXHUwMDNlcmVnX2N0eCA9IG1kaW87XG4rXG4rXHRkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4rXHRkcy1cdTAwM2VkZXYgPSBkZXY7XG4rXHRkcy1cdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XG4rXHRkcy1cdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xuK1x0ZHMtXHUwMDNlcHJpdiA9IHByaXY7XG4rXHRkcy1cdTAwM2VvcHMgPSBjb21wYXRfaW5mby1cdTAwM2Vzd2l0Y2hfb3BzO1xuK1x0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWluID0gY29tcGF0X2luZm8tXHUwMDNlYWdlaW5nX3RpbWVfbWluO1xuK1x0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gY29tcGF0X2luZm8tXHUwMDNlYWdlaW5nX3RpbWVfbWF4O1xuK1x0ZHMtXHUwMDNlcGh5bGlua19tYWNfb3BzID0gY29tcGF0X2luZm8tXHUwMDNlbWFjX29wcztcbitcdGRzLVx1MDAzZW51bV9sYWdfaWRzID0gY29tcGF0X2luZm8tXHUwMDNlbGFnX2lkO1xuK1x0ZHMtXHUwMDNlbnVtX3BvcnRzID0gY29tcGF0X2luZm8tXHUwMDNlcG9ydHM7XG4rXG4rXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIHByaXYpO1xuK1xuK1x0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyeHhfb2ZfbWF0Y2hbXSA9IHtcbitcdHtcbitcdFx0LmNvbXBhdGlibGUgPSBcIm1vdG9yY29tbSx5dDkyMTVcIixcbitcdFx0LmRhdGEgPSBcdTAwMjZ5dDkyeHhfY2hpcF9pbmZvX3RhYmxlW1lUOTIxNV0sXG4rXHR9LFxuK1x0e1xuK1x0XHQuY29tcGF0aWJsZSA9IFwibW90b3Jjb21tLHl0OTIyNFwiLFxuK1x0XHQuZGF0YSA9IFx1MDAyNnl0OTJ4eF9jaGlwX2luZm9fdGFibGVbWVQ5MjI0XSxcbitcdH0sXG4gXHR7fVxuIH07XG4tTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeXQ5MjF4X29mX21hdGNoKTtcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB5dDkyeHhfb2ZfbWF0Y2gpO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuLVx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXG4tXHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxuLVx0LnNodXRkb3duID0geXQ5MjF4X21kaW9fc2h1dGRvd24sXG4rc3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyeHhfbWRpb19kcml2ZXIgPSB7XG4rXHQucHJvYmUgPSB5dDkyeHhfbWRpb19wcm9iZSxcbitcdC5yZW1vdmUgPSB5dDkyeHhfbWRpb19yZW1vdmUsXG4rXHQuc2h1dGRvd24gPSB5dDkyeHhfbWRpb19zaHV0ZG93bixcbiBcdC5tZGlvZHJ2LmRyaXZlciA9IHtcbi1cdFx0Lm5hbWUgPSBZVDkyMVhfTkFNRSxcbi1cdFx0Lm9mX21hdGNoX3RhYmxlID0geXQ5MjF4X29mX21hdGNoLFxuK1x0XHQubmFtZSA9IFlUOTJYWF9OQU1FLFxuK1x0XHQub2ZfbWF0Y2hfdGFibGUgPSB5dDkyeHhfb2ZfbWF0Y2gsXG4gXHR9LFxuIH07XG4gXG4tbWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XG4rbWRpb19tb2R1bGVfZHJpdmVyKHl0OTJ4eF9tZGlvX2RyaXZlcik7XG4gXG4gTU9EVUxFX0FVVEhPUihcIkRhdmlkIFlhbmcgXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXHUwMDNlXCIpO1xuLU1PRFVMRV9ERVNDUklQVElPTihcIkRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBTd2l0Y2hcIik7XG4rTU9EVUxFX0FVVEhPUihcIkt5bGUgU3dpdGNoIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXCIpO1xuK01PRFVMRV9ERVNDUklQVElPTihcIkRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBhbmQgWVQ5MjJ4IFN3aXRjaFwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbmluZGV4IDVmM2I5OWUxODljNDEuLjAzMDhlNmI5MTYxOGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxuQEAgLTgzNyw2ICs4MzcsNyBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcbiBcbiAjZGVmaW5lIFlUOTIxNV9NQUpPUlx0MHg5MDAyXG4gI2RlZmluZSBZVDkyMThfTUFKT1JcdDB4OTAwMVxuKyNkZWZpbmUgWVQ5MjI0X01BSk9SXHQweDkwMDRcbiBcbiAvKiByZXF1aXJlZCBmb3IgYSBoYXJkIHJlc2V0ICovXG4gI2RlZmluZSBZVDkyMVhfUlNUX0RFTEFZX1VTXHQxMDAwMFxuQEAgLTg1Myw2ICs4NTQsOTYgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gLyogOCBpbnRlcm5hbCArIDIgZXh0ZXJuYWwgKyAxIG1jdSAqL1xuICNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXHRcdFx0MTFcbiBcbisvKiB5dDkyMnggcmVnaXN0ZXIgbGlzdHMgKi9cbisjZGVmaW5lIFlUOTJYWF9QQUdFX1NFTEVDVFx0MHgxZVxuKyNkZWZpbmUgWVQ5MlhYX1BBR0VcdFx0MHgxZlxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCkgICAgICAgICAgICAgICAgKDB4ODAwODAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfQ1RSTF9QQVVTRV9BTiAgICAgIEJJVCgxMClcbisjZGVmaW5lIFlUOTIyWF9QT1JUbl9TVEFUVVMocG9ydCkgICAgICAoMHg4MDIwMCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSBZVDkyMlhfRU5fUEhZX09WRVJXUklURSAgICgweDgwMDQwKVxuKyNkZWZpbmUgWVQ5MjJYX0VOX1BIWV9WQUxVRSAgICAgICAoMHg4MDAzYylcbisvKiBDVFJMOiBmb3JjZSBvcCB0byBtYWtlIHNvZnQgY29uZmlndXJhdGlvbiBlZmZlY3RpdmUgKi9cbisjZGVmaW5lIFlUOTIyWF9QT1JUX0ZPUkNFX09QICAgICAgICAgICBCSVQoMTQpXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9DRkdfVFhfRU4gICAgICAgQklUKDEzKVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfQ0ZHX1JYX0VOICAgICAgIEJJVCgxMilcbisjZGVmaW5lIFlUOTIyWF9QT1JUX0ZDX0FOICAgICAgICAgICAgQklUKDExKVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfTElOS19BTiAgICAgICAgICAgIEJJVCgxMCkgIC8qIENUUkw6IGF1dG8gbmVnb3RpYXRpb24gKi9cbisjZGVmaW5lIFlUOTIyWF9QT1JUX0xJTksgICAgICAgICAgICAgICBCSVQoOSkgIC8qIENUUkw6IGxpbmsgc3RhdHVzICovXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9IQUxGX1BBVVNFICAgICAgICAgQklUKDgpICAvKiBIYWxmLWR1cGxleCBiYWNrIHByZXNzdXJlIG1vZGUgKi9cbisjZGVmaW5lIFlUOTIyWF9QT1JUX0RVUExFWF9GVUxMICAgICAgICAgICAgICAgIEJJVCg3KVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfUlhfUEFVU0UgICAgICAgICAgIEJJVCg2KVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfVFhfUEFVU0UgICAgICAgICAgIEJJVCg1KVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfUlhfTUFDX0VOICAgICAgICAgIEJJVCg0KVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfVFhfTUFDX0VOICAgICAgICAgIEJJVCgzKVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfU1BFRURfTSAgICAgICAgICAgIEdFTk1BU0soMiwgMClcbisjZGVmaW5lIFlUOTIyWF9QT1JUX1NEU19NT0RFICAgICAgICAgICAweDQwMFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfU0RTX01PREVfTSAgICAgICAgIEdFTk1BU0soNiwgNClcbisjZGVmaW5lIFlUOTJYWF9TRVJERVNfTU9ERV9TR01JSSAgICAgICAgICAgICAgICAgICAgICAgMFxuKyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFX1JFVlNHTUlJICAgICAgICAgICAgICAgICAgICAxXG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfMTAwMEJBU0VYICAgICAgICAgICAgICAgICAgIDJcbisjZGVmaW5lIFlUOTJYWF9TRVJERVNfTU9ERV8xMDBCQVNFWCAgICAgICAgICAgICAgICAgICAgM1xuKyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFXzI1MDBCQVNFWCAgICAgICAgICAgICAgICAgICA0XG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfVVNYR01JSSAgICAgICAgICAgICAgICAgICAgIDZcbisjZGVmaW5lIFlUOTIyWF9QT1JUX05VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5XG4rLyogTEFHICovXG4rI2RlZmluZSBZVDkyMlhfTEFHX05VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDRcbisvKiBJU08gKi9cbisjZGVmaW5lIFlUOTIyWF9QT1JUbl9JU09MQVRJT04ocG9ydCkgICAgICAgICAgICgweDQgKiAocG9ydCkgKyAweDE4MGQ4MClcbisvKiBGREIgKi9cbisjZGVmaW5lIFlUOTIyWF9QT1JUbl9MRUFSTihwb3J0KSAgICAgICAoMHgxODAzMDAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfTEVBUk5fRElTICAgICAgICAgIEJJVCgxOClcbisvKiBHTE9CQUwgQ1RSTCAqL1xuKyNkZWZpbmUgIFlUOTIyWF9GVU5DX0FDTCAgICAgICAgICAgICAgIEJJVCg1KVxuKyNkZWZpbmUgIFlUOTIyWF9GVU5DX01JQiAgICAgICAgICAgICAgIEJJVCg0KVxuKy8qIENUUkwgUEtUICovXG4rI2RlZmluZSBZVDkyMlhfRklMVEVSX1VOS19VQ0FTVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwZWM4XG4rI2RlZmluZSBZVDkyMlhfQUNUX1VOS19VQ0FTVCAgICAgICAgICAgICAgICAgICAweDE4MGVkOFxuKyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfTUNBU1QgICAgICAgICAgICAgICAgICAgMHgxODBlZTBcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX01DQVNUX0JZUEFTU19EUk9QX1BJTSAgIEJJVCgyMilcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX01DQVNUX0JZUEFTU19EUk9QX01MRCAgIEJJVCgyMSlcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX01DQVNUX0JZUEFTU19EUk9QX0lHTVAgIEJJVCgyMClcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX0FDVG5fTShwb3J0KSAgICAgICAgICAgIEdFTk1BU0soMiAqIChwb3J0KSArIDEsIDIgKiAocG9ydCkpXG4rI2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuKHBvcnQsIHgpICAgICAgICAgICAoKHgpIFx1MDAzY1x1MDAzYyAoMiAqIChwb3J0KSkpXG4rI2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX0ZPUldBUkQocG9ydCkgICAgICBZVDkyMlhfQUNUX1VOS19BQ1RuKHBvcnQsIDApICAvKiBmbG9vZCAqL1xuKyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfQUNUbl9UUkFQKHBvcnQpICAgICAgICAgWVQ5MjJYX0FDVF9VTktfQUNUbihwb3J0LCAzKSAgLyogc3RlZXIgdG8gQ1BVICovXG4rI2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX0RST1AocG9ydCkgICAgICAgICBZVDkyMlhfQUNUX1VOS19BQ1RuKHBvcnQsIDEpICAvKiBkaXNjYXJkICovXG4rLyogTkVWRVIgdXNlIHRoaXMgYWN0aW9uOyBzZWUgY29tbWVudHMgaW4gdGhlIHRhZyBkcml2ZXIgKi9cbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX0FDVG5fQ09QWShwb3J0KSAgICAgICAgIFlUOTIyWF9BQ1RfVU5LX0FDVG4ocG9ydCwgMikgIC8qIGZsb29kIGFuZCBjb3B5ICovXG4rXG4rLyogQ1BVIFBPUlQgKi9cbisjZGVmaW5lIFlUOTIyWF9DUFVfQ09QWVx0XHRcdDB4MTgxMTAwXG4rI2RlZmluZSBZVDkyMlhfQ1BVX0NPUFlfVE9fSU5UX0NQVVx0QklUKDEpXG4rI2RlZmluZSBZVDkyMlhfQ1BVX0NPUFlfVE9fRVhUX0NQVVx0QklUKDApXG4rI2RlZmluZSBZVDkyMlhfQ1BVX1RBR19SWF9DVFJMXHRcdDB4ODA1MDRcbisjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1JYX01PREVcdFx0QklUKDApXG4rI2RlZmluZSBZVDkyMlhfQ1BVX1RBR19UWF9DVFJMXHRcdDB4MTAwNzEwXG4rI2RlZmluZSBZVDkyMlhfQ1BVX1RBR19UWF9UWVBFXHRcdEJJVCgwKVxuKyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfTU9ERVx0XHRCSVQoMSlcbisjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1RYX0NUQUdfT1BcdEJJVCgyKVxuKyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfU1RBR19PUFx0QklUKDMpXG4rXG4rZW51bSB5dDkyMnhfcGh5X3JlZ190eXBlIHtcbitcdFlUOTIyWF9QSFlfUkVHX1RZUEVfQ09NTU9OX0VYVCxcbitcdFlUOTIyWF9QSFlfUkVHX1RZUEVfUEhZX0NPTU1PTl9FWFQsXG4rXHRZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhULFxuK1x0WVQ5MjJYX1BIWV9SRUdfVFlQRV9NSUksXG4rXHRZVDkyMlhfUEhZX1JFR19UWVBFX0VYVCxcbitcdFlUOTIyWF9QSFlfUkVHX1RZUEVfTU1EMSxcbitcdFlUOTIyWF9QSFlfUkVHX1RZUEVfTU1EMyxcbitcdFlUOTIyWF9QSFlfUkVHX1RZUEVfTU1ENyxcbitcdFlUOTIyWF9QSFlfUkVHX1RZUEVfTUFYXG4rfTtcbitcbitlbnVtIHl0OTIyeF9waHlfcmVnX3NwYWNlIHtcbitcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1BIWSxcbitcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1BIWV9UMSxcbitcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1BIWV9MRFMsXG4rXHRZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSxcbitcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1VTWEdNSUksXG4rXHRZVDkyMlhfUEhZX1JFR19TUEFDRV9RU0dNSUksXG4rXHRZVDkyMlhfUEhZX1JFR19TUEFDRV9NQVhcbit9O1xuK1xuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcdTAwM2MgOClcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICgocG9ydCkgPT0gOCB8fCAocG9ydCkgPT0gOSlcbiBcbkBAIC05NDUsOSArMTAzNiwyNiBAQCBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xuIFx0aW50ICgqd3JpdGUpKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiB2YWwpO1xuIH07XG4gXG4rZW51bSB5dDkyeHhfbW9kZSB7XG4rXHRZVDkyMTUsXG4rXHRZVDkyMjQsXG4rfTtcbitcbitzdHJ1Y3QgeXQ5Mnh4X2NoaXBfaW5mbyB7XG4rXHRlbnVtIHl0OTJ4eF9tb2RlIG1vZGU7XG4rXHRjb25zdCBjaGFyICpuYW1lO1xuK1x0dW5zaWduZWQgaW50IHBvcnRzO1xuK1x0dW5zaWduZWQgaW50IGxhZ19pZDtcbitcdHVuc2lnbmVkIGludCBhZ2VpbmdfdGltZV9taW47XG4rXHR1bnNpZ25lZCBpbnQgYWdlaW5nX3RpbWVfbWF4O1xuK1x0Y29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzICpzd2l0Y2hfb3BzO1xuK1x0Y29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyAqbWFjX29wcztcbit9O1xuK1xuIHN0cnVjdCB5dDkyMXhfcHJpdiB7XG4gXHRzdHJ1Y3QgZHNhX3N3aXRjaCBkcztcbiBcbitcdGNvbnN0IHN0cnVjdCB5dDkyeHhfY2hpcF9pbmZvICpjaGlwX2luZm87XG4gXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm87XG4gXHR1bnNpZ25lZCBpbnQgbWV0ZXJfc2xvdF9ucztcbiBcdHVuc2lnbmVkIGludCBwb3J0X3NoYXBlX3Nsb3RfbnM7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHNhLmggYi9pbmNsdWRlL25ldC9kc2EuaFxuaW5kZXggNmY3ZjVjMTdiNTMyMC4uMGMwMzNjYTY1YjkyMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2RzYS5oXG4rKysgYi9pbmNsdWRlL25ldC9kc2EuaFxuQEAgLTYwLDYgKzYwLDcgQEAgc3RydWN0IHRjX2FjdGlvbjtcbiAjZGVmaW5lIERTQV9UQUdfUFJPVE9fTVhMODYyX1ZBTFVFXHRcdDMyXG4gI2RlZmluZSBEU0FfVEFHX1BST1RPX05FVENfVkFMVUVcdFx0MzNcbiAjZGVmaW5lIERTQV9UQUdfUFJPVE9fS1NaODQ2M19WQUxVRVx0XHQzNFxuKyNkZWZpbmUgRFNBX1RBR19QUk9UT19ZVDkyMlhfVkFMVUUgICAgICAgICAgICAgIDM1XG4gXG4gZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcbiBcdERTQV9UQUdfUFJPVE9fTk9ORVx0XHQ9IERTQV9UQUdfUFJPVE9fTk9ORV9WQUxVRSxcbkBAIC05Nyw2ICs5OCw3IEBAIGVudW0gZHNhX3RhZ19wcm90b2NvbCB7XG4gXHREU0FfVEFHX1BST1RPX01YTDg2Mlx0XHQ9IERTQV9UQUdfUFJPVE9fTVhMODYyX1ZBTFVFLFxuIFx0RFNBX1RBR19QUk9UT19ORVRDXHRcdD0gRFNBX1RBR19QUk9UT19ORVRDX1ZBTFVFLFxuIFx0RFNBX1RBR19QUk9UT19LU1o4NDYzXHRcdD0gRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFLFxuK1x0RFNBX1RBR19QUk9UT19ZVDkyMlhcdFx0PSBEU0FfVEFHX1BST1RPX1lUOTIyWF9WQUxVRSxcbiB9O1xuIFxuIHN0cnVjdCBkc2Ffc3dpdGNoO1xuZGlmZiAtLWdpdCBhL25ldC9kc2EvS2NvbmZpZyBiL25ldC9kc2EvS2NvbmZpZ1xuaW5kZXggZDVlNzI1YjkwZDc4NS4uZTRmZDNhOWE2NjIxMSAxMDA2NDRcbi0tLSBhL25ldC9kc2EvS2NvbmZpZ1xuKysrIGIvbmV0L2RzYS9LY29uZmlnXG5AQCAtMjE1LDEwICsyMTUsMTAgQEAgY29uZmlnIE5FVF9EU0FfVEFHX1hSUzcwMFhcbiBcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yXG4gXHQgIEFycm93IFNwZWVkQ2hpcHMgWFJTNzAweCBzd2l0Y2hlcyB0aGF0IHVzZSBhIHNpbmdsZSBieXRlIHRhZyB0cmFpbGVyLlxuIFxuLWNvbmZpZyBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHRyaXN0YXRlIFwiVGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlc1wiXG4rY29uZmlnIE5FVF9EU0FfVEFHX1lUOTJYWFxuK1x0dHJpc3RhdGUgXCJUYWcgZHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IGFuZCBZVDkyMnggc3dpdGNoZXNcIlxuIFx0aGVscFxuIFx0ICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0YWdnaW5nIGZyYW1lcyBmb3Jcbi1cdCAgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlcy5cbitcdCAgTW90b3Jjb21tIFlUOTIxeCBhbmQgWVQ5MjJ4IHN3aXRjaGVzLlxuIFxuIGVuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS9NYWtlZmlsZSBiL25ldC9kc2EvTWFrZWZpbGVcbmluZGV4IGI4YzI2NjdjZDE0YWEuLjJkNzJhMjVmZDk4NDYgMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL01ha2VmaWxlXG4rKysgYi9uZXQvZHNhL01ha2VmaWxlXG5AQCAtNDIsNyArNDIsNyBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfU0pBMTEwNSkgKz0gdGFnX3NqYTExMDUub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19UUkFJTEVSKSArPSB0YWdfdHJhaWxlci5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1ZTQzczWFhfODAyMVEpICs9IHRhZ192c2M3M3h4XzgwMjFxLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfWFJTNzAwWCkgKz0gdGFnX3hyczcwMHgub1xuLW9iai0kKENPTkZJR19ORVRfRFNBX1RBR19ZVDkyMVgpICs9IHRhZ195dDkyMXgub1xuK29iai0kKENPTkZJR19ORVRfRFNBX1RBR19ZVDkyWFgpICs9IHRhZ195dDkyMXgub1xuIFxuICMgZm9yIHRyYWNpbmcgZnJhbWV3b3JrIHRvIGZpbmQgdHJhY2UuaFxuIENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfeXQ5MjF4LmMgYi9uZXQvZHNhL3RhZ195dDkyMXguY1xuaW5kZXggMjk0Nzg0YWI2Njk0Yi4uYTMwMTJlYzM5ODY4NiAxMDA2NDRcbi0tLSBhL25ldC9kc2EvdGFnX3l0OTIxeC5jXG4rKysgYi9uZXQvZHNhL3RhZ195dDkyMXguY1xuQEAgLTEsOCArMSwxMCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gLypcbiAgKiBNb3RvcmNvbW0gWVQ5MjF4IFN3aXRjaCBFeHRlbmRlZCBDUFUgUG9ydCBUYWdnaW5nXG4rICogTW90b3Jjb21tIFlUOTIyeCBTd2l0Y2ggRXh0ZW5kZWQgQ1BVIFBvcnQgVGFnZ2luZ1xuICAqXG4gICogQ29weXJpZ2h0IChjKSAyMDI1IERhdmlkIFlhbmcgXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXHUwMDNlXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IEt5bGUgc3dpdGNoIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICpcbiAgKiArLS0tLSstLS0tKy0tLS0tLS0rLS0tLS0rLS0tLSstLS0tLS0tLS1cbiAgKiB8IERBIHwgU0EgfCBUYWdFVCB8IFRhZyB8IEVUIHwgUGF5bG9hZCAuLi5cbkBAIC0xNjYsOCArMTY4LDExNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIHl0OTIxeF9uZXRkZXZfb3BzID0ge1xuIFx0Lm5lZWRlZF9oZWFkcm9vbSA9IFlUOTIxWF9UQUdfTEVOLFxuIH07XG4gXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFwiRFNBIHRhZyBkcml2ZXIgZm9yIE1vdG9yY29tbSBZVDkyMXggc3dpdGNoZXNcIik7XG4tTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4rRFNBX1RBR19EUklWRVIoeXQ5MjF4X25ldGRldl9vcHMpO1xuIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX1lUOTIxWCwgWVQ5MjFYX1RBR19OQU1FKTtcbiBcbi1tb2R1bGVfZHNhX3RhZ19kcml2ZXIoeXQ5MjF4X25ldGRldl9vcHMpO1xuKy8qIFRvIGRlZmluZSB0aGUgZnJvbSBjcHUgdGFnIGZvcm1hdCA4IGJ5dGVzOlxuKyAqXG4rICogMCAxIDIgMyA0IDUgNiA3IHwwIDEgMiAzIDQgNSA2IDdcbisgKnxcdTAwM2MtLS0tLS0tLS0tLS1UUElEIDB4OTk4OC0tLS0tLS1cdTAwM2V8XG4rICp8XHUwMDNjLS1SRVNFUlZFLS1cdTAwM2V8XHUwMDNjLS0tLS1EU1QgUE9SLS0tLVx1MDAzZXxcbisgKnwtfFx1MDAzYy0tLS0tLS0tLVJFU0VSVkUtLS0tLS0tLS0tLS1cdTAwM2V8XG4rICp8XHUwMDNjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHUwMDNlfFxuKyAqL1xuKyNkZWZpbmUgWVQ5MjJYX1RBR19OQU1FXHRcdFx0XCJ5dDkyMnhcIlxuKyNkZWZpbmUgWVQ5MjJYX1RBR19QT1JUTUFTS18wXHRcdEJJVCgxNSlcbisjZGVmaW5lIFlUOTIyWF9UQUdfUE9SVE1BU0tfTVx0XHRHRU5NQVNLKDgsIDApXG4rI2RlZmluZSBZVDkyMlhfVEFHX1BPUlRTKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjJYX1RBR19QT1JUTUFTS19NLCAoeCkpXG4rI2RlZmluZSBZVDkyMlhfVEFHX0ZPUkNFX0RTVFx0XHRCSVQoOSlcbisjZGVmaW5lIFlUOTIyWF9UQUdfUFJJT19NXHRcdEdFTk1BU0soMTIsIDEwKVxuKyNkZWZpbmUgWVQ5MjJYX1RBR19QUklPX0VOXHRcdEJJVCgxMylcbisjZGVmaW5lIFlUOTIyWF9UQUdfUFJJTyh4KVx0XHQoRklFTERfUFJFUChZVDkyMlhfVEFHX1BSSU9fTSwgKHgpKSB8IFlUOTIyWF9UQUdfUFJJT19FTilcbisjZGVmaW5lIFlUOTIyWF9UQUdfUlhfUE9SVF9NXHRcdEdFTk1BU0soNSwgMilcbisjZGVmaW5lIFlUOTIyWF9UQUdfUlhfUFJJT19NXHRcdEdFTk1BU0soMTUsIDEzKVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG4reXQ5MjJ4X3RhZ194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4re1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQobmV0ZGV2KTtcbitcdF9fYmUxNiAqdGFnO1xuK1x0dTE2IGN0cmw7XG4rXG4rXHRza2JfcHVzaChza2IsIFlUOTIxWF9UQUdfTEVOKTtcbitcdGRzYV9hbGxvY19ldHlwZV9oZWFkZXIoc2tiLCBZVDkyMVhfVEFHX0xFTik7XG4rXHR0YWcgPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc190eChza2IpO1xuK1xuK1x0dGFnWzBdID0gaHRvbnMoRVRIX1BfWVQ5MjFYKTtcbitcdGlmIChkcC1cdTAwM2VpbmRleCAhPSAwKSB7XG4rXHRcdC8qIFBvcnQgaW5kZXggaXMgbm90IGVxdWFsIDAgaW4gdGFnWzFdICovXG4rXHRcdGN0cmwgPSBZVDkyMlhfVEFHX1BSSU8oc2tiLVx1MDAzZXByaW9yaXR5KSB8IFlUOTIyWF9UQUdfRk9SQ0VfRFNUIHxcbitcdFx0XHRZVDkyMlhfVEFHX1BPUlRTKGRzYV94bWl0X3BvcnRfbWFzayhza2IsIG5ldGRldikgLSAxKTtcbitcdFx0dGFnWzFdID0gaHRvbnMoY3RybCk7XG4rXHRcdHRhZ1syXSA9IDA7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBQb3J0IDAgaW4gYml0MTUgaW4gdGFnWzJdICovXG4rXHRcdGN0cmwgPSBZVDkyMlhfVEFHX1BSSU8oc2tiLVx1MDAzZXByaW9yaXR5KSB8IFlUOTIyWF9UQUdfRk9SQ0VfRFNUO1xuK1x0XHR0YWdbMV0gPSBodG9ucyhjdHJsKTtcbitcdFx0Y3RybCA9IFlUOTIyWF9UQUdfUE9SVE1BU0tfMDtcbitcdFx0dGFnWzJdID0gaHRvbnMoY3RybCk7XG4rXHR9XG4rXHR0YWdbM10gPSAwO1xuK1xuK1x0cmV0dXJuIHNrYjtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpcbit5dDkyMnhfdGFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuK3tcbitcdHVuc2lnbmVkIGludCBwb3J0O1xuK1x0X19iZTE2ICp0YWc7XG4rXHR1MTYgcng7XG4rXG4rXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBZVDkyMVhfVEFHX0xFTikpKSB7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7XG4rXG4rXHRpZiAodW5saWtlbHkodGFnWzBdICE9IGh0b25zKEVUSF9QX1lUOTIxWCkpKSB7XG4rXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKFx1MDAyNm5ldGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgIFwiVW5leHBlY3RlZCBFdGhlclR5cGUgMHglMDR4XFxuXCIsXG4rXHRcdFx0XHQgICAgIG50b2hzKHRhZ1swXSkpO1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHQvKiBMb2NhdGUgd2hpY2ggcG9ydCB0aGlzIGlzIGNvbWluZyBmcm9tICovXG4rXHRyeCA9IG50b2hzKHRhZ1syXSk7XG4rXHRwb3J0ID0gRklFTERfR0VUKFlUOTIyWF9UQUdfUlhfUE9SVF9NLCByeCk7XG4rXHRza2ItXHUwMDNlZGV2ID0gZHNhX2NvbmR1aXRfZmluZF91c2VyKG5ldGRldiwgMCwgcG9ydCk7XG4rXHRpZiAodW5saWtlbHkoIXNrYi1cdTAwM2VkZXYpKSB7XG4rXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKFx1MDAyNm5ldGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgIFwiQ291bGRuJ3QgZGVjb2RlIHNvdXJjZSBwb3J0ICV1XFxuXCIsIHBvcnQpO1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHQvKiBSZW1vdmUgdGFnIGFuZCB1cGRhdGUgY2hlY2tzdW0gKi9cbitcdHNrYl9wdWxsX3Jjc3VtKHNrYiwgWVQ5MjFYX1RBR19MRU4pO1xuK1x0ZHNhX3N0cmlwX2V0eXBlX2hlYWRlcihza2IsIFlUOTIxWF9UQUdfTEVOKTtcbitcbitcdHJldHVybiBza2I7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgeXQ5MjJ4X25ldGRldl9vcHMgPSB7XG4rXHQubmFtZSAgID0gWVQ5MjJYX1RBR19OQU1FLFxuK1x0LnByb3RvICA9IERTQV9UQUdfUFJPVE9fWVQ5MjJYLFxuK1x0LnhtaXQgICA9IHl0OTIyeF90YWdfeG1pdCxcbitcdC5yY3YgICAgPSB5dDkyMnhfdGFnX3JjdixcbitcdC5uZWVkZWRfaGVhZHJvb20gPSBZVDkyMVhfVEFHX0xFTixcbit9O1xuK1xuK0RTQV9UQUdfRFJJVkVSKHl0OTIyeF9uZXRkZXZfb3BzKTtcbitNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19ZVDkyMlgsIFlUOTIyWF9UQUdfTkFNRSk7XG4rXG4rc3RhdGljIHN0cnVjdCBkc2FfdGFnX2RyaXZlciAqZHNhX3RhZ19kcml2ZXJfYXJyYXlbXSA9IHtcbitcdFx1MDAyNkRTQV9UQUdfRFJJVkVSX05BTUUoeXQ5MjF4X25ldGRldl9vcHMpLFxuK1x0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRSh5dDkyMnhfbmV0ZGV2X29wcyksXG4rfTtcbittb2R1bGVfZHNhX3RhZ19kcml2ZXJzKGRzYV90YWdfZHJpdmVyX2FycmF5KTtcbitcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJEU0EgdGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBhbmQgWVQ5MjJ4IHN3aXRjaGVzXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuK1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjE6MjcuMzE1MDU2NTE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwNTU1NTg0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZT8gQSBEZWVwIERpdmUgaW50byB0aGUgWVQ5MjI0IERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIyNCBzd2l0Y2ggY2hpcCB0byB0aGUgYHl0OTIxeGAgRFNBIGRyaXZlci4gIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cywgXCJIb3cgY2FuIEkgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGUgaW4gYSB0ZXN0aW5nIGVudmlyb25tZW50P1wiIEl0J3MgbW9kaWZ5aW5nIGB5dDkyMXguY2AsIGB5dDkyMXguaGAsIGB0YWdfeXQ5MjF4LmNgLCBhbmQgdGhlIEtjb25maWcvTWFrZWZpbGVzIOKAkyBhbGwgZ29vZCBzdHVmZiwgYnV0IHVzZWxlc3MgaWYgSSBjYW4ndCB0cmlnZ2VyIGl0LlxuXG5SaWdodCwgc28gaXQncyBhbiBNRElPIGRyaXZlciAoYHl0OTJ4eF9tZGlvX2RyaXZlcmApLiBJdCByZWdpc3RlcnMgdXNpbmcgYG1kaW9fbW9kdWxlX2RyaXZlcigpYC4gVGhhdCBtZWFucyBEZXZpY2UgVHJlZSBpcyBwcm9iYWJseSB0aGUga2V5IHRvIGdldHRpbmcgaXQgcHJvYmVkLiAgQ2FuIEkgZW11bGF0ZSB0aGF0PyBDYW4gSSBmYWtlIGl0IHdpdGggYSBzb2Z0d2FyZSBNRElPIGJ1cz8gU3l6a2FsbGVyJ3MgZ3JlYXQsIGJ1dCBkb2VzIGl0IGhhdmUgYW55IE1ESU8gbWFnaWM/ICBObywgbm90IGEgZ2VuZXJpYyBmdXp6ZXIgdW5sZXNzIGl0J3Mgc3BlY2lmaWMgdG8gdGhlIHN1YnN5c3RlbS4gSG1tLCBzeXprYWxsZXIgKmNhbiogcHJvYmUgZGV2aWNlcyBpZiBpdCBoYXMgRFQgbm9kZXMsIGJ1dCBubyBhcmJpdHJhcnkgTURJTyBub2Rlcy4gRGFtbi5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrLiBBbnkgb3RoZXIgZW50cnkgcG9pbnQ/ICBIb3cgYWJvdXQgYHl0OTJ4eF9tZGlvX3Byb2JlYD8gIEl0IHJlcXVpcmVzIGBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoKWAsIHNvIGl0J3MgZGVmaW5pdGVseSB0aWVkIHRvIERldmljZSBUcmVlIChgeXQ5Mnh4X29mX21hdGNoYCkuICBTbywgd2l0aG91dCBhIHJlYWwgZGV2aWNlIG9yIGEgY3VzdG9tIFFFTVUgc2V0dXAsIEknbSBzdHVjay4gIFN5emthbGxlcidzIGBzeXpfZGV2bGlua2AgaXNuJ3QgZ29pbmcgdG8gaGVscC4gIElzIHRoZXJlIGV2ZW4gYW55IGVtdWxhdGlvbiBmb3IgdGhlIFlUOTIxNS9ZVDkyMjQgaW4gUUVNVT8gTm8uIFNvLCBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMgYXJlIGRlYWQgZW5kcyBmb3IgdGhpcyBwcm9iZSBmdW5jdGlvbi4gVGhlIGRyaXZlcidzIHByb2JlIGNvZGUgbG9va3MgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudC5cblxuQWxyaWdodCwgbGV0J3MgbG9vayBkZWVwZXIuICBgeXQ5MjJ4X3RhZ194bWl0YCBhbmQgYHl0OTIyeF90YWdfcmN2YCBhcmUgaW4gYHRhZ195dDkyMXguY2AuIERTQSB0YWcgZHJpdmVycyBhcmUgb2Z0ZW4gYSBzZXBhcmF0ZSBiZWFzdC4gT2theSwgc28gRFNBIHRhZ2dlcnMgKmNvdWxkKiBiZSBoaXQgaWYgYSBEU0Egc3dpdGNoIGlzIGluc3RhbnRpYXRlZCwgb3IgaWYgSSBjYW4gc2V0IHRoZSB0YWcgcHJvdG9jb2wgb24gYSBnZW5lcmljIERTQSBzd2l0Y2ggbGlrZSBgZHNhX2xvb3BgIG9yIGBzYW5kYm94YC4gTm93IHdlJ3JlIGdldHRpbmcgc29tZXdoZXJlLiBXYWl0LCBJIGNhbiBhY3R1YWxseSAqY2hhbmdlKiB0aGUgdGFnIHByb3RvY29sIG9uIGBkc2FfbG9vcGA/ICBZZXMhIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jYFxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ2NiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjIxOjM5LjM3MDYxODIwNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUzODE0MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV9sb29wXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdD0xNTk9YWxsIGF0dGFjaGVkIHN3aXRjaCBwb3J0cyBtdXN0IGJlIGRvd24gd2hpbGUgZG9pbmcgdGhpcykuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0LTE2MC1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3Q6MTYxOkl0IGlzIGRlc2lyYWJsZSB0aGF0IGFsbCB0YWdnaW5nIHByb3RvY29scyBhcmUgdGVzdGFibGUgd2l0aCB0aGUgYGBkc2FfbG9vcGBgXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0LTE2Mi1tb2NrdXAgZHJpdmVyLCB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdG8gYW55IG5ldHdvcmsgaW50ZXJmYWNlLiBUaGUgZ29hbCBpcyB0aGF0XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9Mz1iY20tc2YyLW9ianNcXHRcXHRcXHQ6PSBiY21fc2YyLm8gYmNtX3NmMl9jZnAub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXFx0Kz0gZHNhX2xvb3Aub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXFx0Kz0ga3M4OTk1Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1OnN0cnVjdCBkc2FfbG9vcF92bGFuIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNi1cXHR1MTYgbWVtYmVycztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxLVxcdGNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzQtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU6ZW51bSBkc2FfbG9vcF9taWJfY291bnRlcnMge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVxcdERTQV9MT09QX1BIWV9SRUFEX09LLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM6c3RydWN0IGRzYV9sb29wX3BvcnQge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0OlxcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDUtXFx0dTE2IHB2aWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTpzdHJ1Y3QgZHNhX2xvb3BfcHJpdiB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXFx0c3RydWN0IG1paV9idXNcXHQqYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVxcdHVuc2lnbmVkIGludFxcdHBvcnRfYmFzZTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiB2bGFuc1tWTEFOX05fVklEXTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01My1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU0OlxcdHN0cnVjdCBkc2FfbG9vcF9wb3J0IHBvcnRzW0RTQV9NQVhfUE9SVFNdO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTc6c3RydWN0IGRzYV9sb29wX3BkYXRhIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cXHQvKiBNdXN0IGJlIGZpcnN0LCBzdWNoIHRoYXQgZHNhX3JlZ2lzdGVyX3N3aXRjaCgpIGNhbiBhY2Nlc3MgdGhpc1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Njc6c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgZHNhX2xvb3BfbWlic1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTY4LVxcdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cXHQ9IHsgXFxcInBoeV9yZWFkX29rXFxcIiwgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTc1PXN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKnN3aXRjaF9tZGlvZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc3OmVudW0gZHNhX2xvb3BfZGV2bGlua19yZXNvdXJjZV9pZCB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNzgtXFx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4NDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg1LVxcdHVuc2lnbmVkIGludCBpLCBjb3VudCA9IDA7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XFx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6OTc6c3RhdGljIGludCBkc2FfbG9vcF9zZXR1cF9kZXZsaW5rX3Jlc291cmNlcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk5LVxcdHN0cnVjdCBkZXZsaW5rX3Jlc291cmNlX3NpemVfcGFyYW1zIHNpemVfcGFyYW1zO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXFx0aW50IGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cXHRcXHRcXHRcXHRcXHQgICAgICBEU0FfTE9PUF9ERVZMSU5LX1BBUkFNX0lEX1ZUVSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgZHNhX2xvb3BfZGV2bGlua192dHVfZ2V0LCBwcyk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNDpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzUte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRzLVxcdTAwM2VudW1fcG9ydHM7IGkrKylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDA6XFx0XFx0bWVtY3B5KHBzLVxcdTAwM2Vwb3J0c1tpXS5taWIsIGRzYV9sb29wX21pYnMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlxcdFxcdCAgICAgICBzaXplb2YoZHNhX2xvb3BfbWlicykpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0NC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XFx0cmV0dXJuIGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDYtfVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDg6c3RhdGljIHZvaWQgZHNhX2xvb3BfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNTItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTUzOnN0YXRpYyBpbnQgZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjItXFx0XFx0XFx0XFx0IHUzMiBzdHJpbmdzZXQsIHVpbnQ4X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTY1LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTczLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE3NDpzdGF0aWMgdm9pZCBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICAgdWludDY0X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE4NDpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg1LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTk4LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE5OTpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV93cml0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cXHRcXHRcXHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAxLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyMDI6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAzLVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIxNTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMTYtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI3LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjMzOnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cXHRcXHRcXHRcXHRcXHR1OCBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzOS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNDA6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVxcdFxcdFxcdFxcdFxcdGJvb2wgdmxhbl9maWx0ZXJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNDktXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjUwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cXHRib29sIHB2aWQgPSB2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjgyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODYtXFx0Ym9vbCB1bnRhZ2dlZCA9IHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyODc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg4LVxcdHUxNiBwdmlkID0gcHMtXFx1MDAzZXBvcnRzW3BvcnRdLnB2aWQ7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg5LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI5MDpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxMi1cXHRcXHRcXHRcXHQgICAgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMTQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjAtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzIxOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMzMtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZHNhX2xvb3BfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gZHNhX2xvb3BfZ2V0X3Byb3RvY29sLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcXHQuc2V0dXBcXHRcXHRcXHQ9IGRzYV9sb29wX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNzpcXHQudGVhcmRvd25cXHRcXHQ9IGRzYV9sb29wX3RlYXJkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzOTpcXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MDpcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGRzYV9sb29wX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MTpcXHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXFx0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDI6XFx0LnBoeV9yZWFkXFx0XFx0PSBkc2FfbG9vcF9waHlfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XFx0LnBoeV93cml0ZVxcdFxcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NDpcXHQucG9ydF9icmlkZ2Vfam9pblxcdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDU6XFx0LnBvcnRfYnJpZGdlX2xlYXZlXFx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDY6XFx0LnBvcnRfc3RwX3N0YXRlX3NldFxcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NzpcXHQucG9ydF92bGFuX2ZpbHRlcmluZ1xcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDg6XFx0LnBvcnRfdmxhbl9hZGRcXHRcXHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ5OlxcdC5wb3J0X3ZsYW5fZGVsXFx0XFx0PSBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSBkc2FfbG9vcF9wb3J0X2NoYW5nZV9tdHUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTI6XFx0LnBoeWxpbmtfZ2V0X2NhcHNcXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzUzLX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTc6XFx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Mi1cXHRkcy1cXHUwMDNlZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XFx0ZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVxcdGRzLVxcdTAwM2Vwcml2ID0gcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OC17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQwMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjQtXFx0Lm1kaW9kcnYuZHJpdmVyXFx0PSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjYtXFx0fSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjc6XFx0LnByb2JlXFx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI4OlxcdC5yZW1vdmVcXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI5OlxcdC5zaHV0ZG93biA9IGRzYV9sb29wX2Rydl9zaHV0ZG93bixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzEtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDMyOnN0YXRpYyBpbnQgZHNhX2xvb3BfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzNTpcXHRyZXR1cm4gZHJ2ID09IFxcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM2LX1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM4OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ2OnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ4OlxcdHN0YXRpYyBzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEgZHNhX2xvb3BfcGRhdGEgPSB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVxcdFxcdC5jZCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzE6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzI6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXFx1MDAyNmRzYV9sb29wX3BkYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4My17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3OlxcdHJldCA9IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldigpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcXHRyZXQgPSBtZGlvX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcXHRcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXFx0XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwMi19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTAzOm1vZHVsZV9pbml0KGRzYV9sb29wX2luaXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDU6c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcXHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZkc2FfbG9vcF9kcnYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDktXFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMS19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjE6NDEuMzI0NDQ1Mjc2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxOTcyMzA0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBEU0EgVGFnIFByb3RvY29sIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBEU0EgdGFnIHByb3RvY29scyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoaW5raW5nIGFib3V0IHRoZSBgZHNhX2xvb3BgIGRyaXZlci4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBkc2FfbG9vcGAgdXNlcyBgZHNhX2xvb3BfZ2V0X3Byb3RvY29sYCwgd2hpY2ggc2VlbXMgdG8gYWx3YXlzIHJldHVybiBgRFNBX1RBR19QUk9UT19OT05FYC4gVGhhdCdzIGEgYml0IGxpbWl0aW5nLCBpc24ndCBpdD9cblxuTXkgbmV4dCB0aG91Z2h0IGlzLCBjYW4gd2Ugc29tZWhvdyBvdmVycmlkZSB0aGlzPyBDYW4gd2UgbWFuaXB1bGF0ZSB0aGUgdGFnIHByb3RvY29sIHZpYSBkZXZsaW5rIG9yIHN5c2ZzPyBCdXQgd2FpdCwgbG9va2luZyBjbG9zZXIgYXQgdGhlIGNvZGUgZm9yIGBkc2FfbG9vcF9nZXRfcHJvdG9jb2xgLCBpdCdzIGhhcmRjb2RlZCB0byByZXR1cm4gYERTQV9UQUdfUFJPVE9fTk9ORWAuIFRoYXQncyBhIGRlYWQgZW5kIHRoZXJlLlxuXG5TbywgaWYgYGRzYV9sb29wYCBpc24ndCBnb2luZyB0byBiZSBoZWxwZnVsIGRpcmVjdGx5LCB3aGF0ICpvdGhlciogYXZlbnVlcyBhcmUgdGhlcmUgZm9yIHRlc3RpbmcgRFNBIHRhZ2dlcnM/IEkgcmVtZW1iZXIgYGRzYV9sb29wX2JkaW5mby5jYCByZWdpc3RlcnMgdGhvc2UgZml4ZWQgUEhZcy4gQW55dGhpbmcgdGhlcmU/ICBNb3JlIGdlbmVyYWxseSwgaXMgdGhlcmUgKmFueSogb3RoZXIgZHJpdmVyIGluIHRoZSBEU0EgZWNvc3lzdGVtIHRoYXQgZ2l2ZXMgeW91IHRoZSBhYmlsaXR5IHRvICpzZXQqIHRoZSBEU0EgdGFnIHByb3RvY29sLCBvciBkeW5hbWljYWxseSBjaGFuZ2UgaXQ/XG5cbk9rYXksIGJhY2sgdG8gYGRzYV9sb29wYC4gQ2FuIEkgY29uZmlndXJlIGl0IHRvIGJlIHNvbWV0aGluZyAqb3RoZXIqIHRoYW4gYERTQV9UQUdfUFJPVE9fTk9ORWA/IEl0IGtlZXBzIGNvbWluZyBiYWNrIHRvIHRoZSBmYWN0IHRoYXQgaXQgcmV0dXJucyBgRFNBX1RBR19QUk9UT19OT05FYC4gIFNvLCBob3cgY2FuIEkgZXZlbiBleHBsb3JlIHRoZSBgRFNBX1RBR19QUk9UT19ZVDkyMlhgIHRhZ2dlcj8gQWgsIHRoZSBgeXQ5MjJ4X25ldGRldl9vcHNgIGFyZSByZWdpc3RlcmVkIHZpYSBgRFNBX1RBR19EUklWRVJgLiBTbywgY2FuIEkgZHluYW1pY2FsbHkgKmNoYW5nZSogdGhlIHRhZyBwcm90b2NvbCBvZiBhIERTQSBzd2l0Y2g/IEknbSB0aGlua2luZyBhYm91dCBzeXNmcyBvciBOZXRsaW5rLiBTdXJlbHkgdGhlcmUgaXMgc29tZSBtZXRob2QgbGlrZSBgZHNhX3N3aXRjaF9zZXRfdGFnX3Byb3RvY29sYCBzb21ld2hlcmUuIFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLCBpc24ndCBpdD8gTGV0IG1lIGxvb2sgZm9yIGEgd2F5IHRvIGNoYW5nZSBpdCBkeW5hbWljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzMTgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjE6NTMuNTIxNjc5MzcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjA5NjMxMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHNhX3RhZ19wcm90b2NvbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3Q9NjA2PVN3aXRjaCBjb25maWd1cmF0aW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3QtNjA5LS0gYGBnZXRfdGFnX3Byb3RvY29sYGA6IHRoaXMgaXMgdG8gaW5kaWNhdGUgd2hhdCBraW5kIG9mIHRhZ2dpbmcgcHJvdG9jb2wgaXNcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3Q6NjEwOiAgc3VwcG9ydGVkLCBzaG91bGQgYmUgYSB2YWxpZCB2YWx1ZSBmcm9tIHRoZSBgYGRzYV90YWdfcHJvdG9jb2xgYCBlbnVtLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdC02MTEtICBUaGUgcmV0dXJuZWQgaW5mb3JtYXRpb24gZG9lcyBub3QgaGF2ZSB0byBiZSBzdGF0aWM7IHRoZSBkcml2ZXIgaXMgcGFzc2VkIHRoZVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM9MjQ3OD1zdGF0aWMgYm9vbCBiNTNfY2FuX2VuYWJsZV9icmNtX3RhZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzoyNDc5OlxcdFxcdFxcdFxcdCAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHRhZ19wcm90b2NvbClcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0yNDgwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTI1MDMtXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MjUwNDplbnVtIGRzYV90YWdfcHJvdG9jb2wgYjUzX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzoyNTA1OlxcdFxcdFxcdFxcdFxcdCAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcHJvdClcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0yNTA2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaD0xMzM9c3RydWN0IGI1M19kZXZpY2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oLTE1NC1cXHR1MTYgbnVtX2FybF9idWNrZXRzO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDoxNTU6XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHRhZ19wcm90b2NvbDtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtMTU2LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTU0Nz1pbnQgYjUzX21pcnJvcl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC01NDktXFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2Lmg6NTUwOmVudW0gZHNhX3RhZ19wcm90b2NvbCBiNTNfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDo1NTE6XFx0XFx0XFx0XFx0XFx0ICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wcm90KTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtNTUyLXZvaWQgYjUzX21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTk3PXN0YXRpYyBpbnQgZHNhX2xvb3Bfc2V0dXBfZGV2bGlua19yZXNvdXJjZXMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNzpcXHRcXHRcXHRcXHRcXHRcXHQgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9oaXJzY2htYW5uL2hlbGxjcmVlay5jPTIyNz1zdGF0aWMgdm9pZCBoZWxsY3JlZWtfZmVhdHVyZV9kZXRlY3Qoc3RydWN0IGhlbGxjcmVlayAqaGVsbGNyZWVrKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmMtMjM5LVxcbmRyaXZlcnMvbmV0L2RzYS9oaXJzY2htYW5uL2hlbGxjcmVlay5jOjI0MDpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGhlbGxjcmVla19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvaGlyc2NobWFubi9oZWxsY3JlZWsuYy0yNDEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmM6MjQyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcXG5kcml2ZXJzL25ldC9kc2EvaGlyc2NobWFubi9oZWxsY3JlZWsuYy0yNDMte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2tzODk5NS5jPTUzMD1zdGF0aWMgZW51bVxcbmRyaXZlcnMvbmV0L2RzYS9rczg5OTUuYzo1MzE6ZHNhX3RhZ19wcm90b2NvbCBrczg5OTVfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL2tzODk5NS5jLTUzMi1cXHRcXHRcXHRcXHRcXHQgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2tzODk5NS5jOjUzMzpcXHRcXHRcXHRcXHRcXHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9rczg5OTUuYy01MzQte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jPTg2Nz1zdGF0aWMgaW50IGxhbjkzMDNfY2hlY2tfZGV2aWNlKHN0cnVjdCBsYW45MzAzICpjaGlwKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTkzNi1cXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6OTM3OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbGFuOTMwM19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmMtOTM4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYzo5Mzk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy05NDAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXAuaD0yNTU9c3RydWN0IGdzd2lwX2h3X2luZm8ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXAuaC0yNjItXFx0c2l6ZV90IHBjZV9taWNyb2NvZGVfc2l6ZTtcXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcC5oOjI2MzpcXHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgdGFnX3Byb3RvY29sO1xcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwLmgtMjY0LVxcdHZvaWQgKCpwaHlsaW5rX2dldF9jYXBzKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM9NzQyPXN0YXRpYyB2b2lkIGdzd2lwX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jLTc0OC1cXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYzo3NDk6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBnc3dpcF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy03NTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jOjc1MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jLTc1Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0yOTcwPXN0YXRpYyBpbnQga3N6OF9zd2l0Y2hfaW5pdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk3OC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyOTc5OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wga3N6ODQ2M19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTgwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5ODE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5ODIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9Mjk4Nj1zdGF0aWMgaW50IGtzejg0NjNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5ODc6XFx0XFx0XFx0XFx0XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5ODgte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk5OS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMDAwOnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wga3N6ODd4eF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMDAxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMDI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMwMDMte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzAwNz1zdGF0aWMgaW50IGtzejg3eHhfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMDg6XFx0XFx0XFx0XFx0XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMwMDkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAxNS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMDE2OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wga3N6ODh4eF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMDE3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMTg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMwMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzAyOD1zdGF0aWMgaW50IGtzejg4eHhfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMjk6XFx0XFx0XFx0XFx0XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMwMzAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9MTk3MD1zdGF0aWMgaW50IGtzejk0Nzdfc3dpdGNoX2luaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTE5ODktXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM6MTk5MDpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGtzejk0NzdfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMTk5MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzoxOTkyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0xOTkzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTIwMDQ9c3RhdGljIGludCBrc3o5NDc3X2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzoyMDA1OlxcdFxcdFxcdFxcdFxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0yMDA2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM9NzY4PXN0YXRpYyBpbnQgbGFuOTM3eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTkwNy1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jOjkwODpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGxhbjkzN3hfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy05MDktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYzo5MTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtOTExLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM9OTE1PXN0YXRpYyBpbnQgbGFuOTM3eF9jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYzo5MTY6XFx0XFx0XFx0XFx0XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtOTE3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0yMTQ2PXN0YXRpYyB2b2lkIG10NzUzeF9wb3J0X21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTY4LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyMTY5OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjE3MC1tdGtfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyMTcxOlxcdFxcdCAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTYwNjAuYz0yNz1zdGF0aWMgY29uc3QgY2hhciAqbXY4OGU2MDYwX2dldF9uYW1lKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBzd19hZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNjA2MC5jLTQ0LVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTYwNjAuYzo0NTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIG12ODhlNjA2MF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2MDYwLmMtNDYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNjA2MC5jOjQ3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBtKVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTYwNjAuYy00OC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz02NjI3PXN0YXRpYyBzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKm12ODhlNnh4eF9hbGxvY19jaGlwKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTY2NDUtXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6NjY0NjpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIG12ODhlNnh4eF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjQ3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjY2NDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIG0pXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNjY0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz02NjU1PXN0YXRpYyBpbnQgbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjY2NTY6XFx0XFx0XFx0XFx0XFx0IGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjU3LXtcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjU4LVxcdHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcCA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjY2NTk6XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIG9sZF9wcm90b2NvbDtcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjYwLVxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmg9MzQ5PXN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuaC0zNTItXFx0LyogQ3VycmVudGx5IGNvbmZpZ3VyZWQgdGFnZ2luZyBwcm90b2NvbCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5oOjM1MzpcXHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgdGFnX3Byb3RvY29sO1xcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5oLTM1NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTE1OT1zdGF0aWMgY29uc3Qgc3RydWN0IG14bDg2Mnh4X2V2bGFuX3J1bGVfZGVzYyB2aWRfYWNjZXB0X2VncmVzc191bmF3YXJlW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0xNjMtXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6MTY0OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXhsODYyeHhfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMTY1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoxNjY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtKVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTE2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz01Mj1zdGF0aWMgdm9pZCBuZXRjX2Rlc3Ryb3lfdmxhbl9saXN0KHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTYwLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jOjYxOnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy02Mi1uZXRjX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzo2MzpcXHRcXHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXByb3QpXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtNjQte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTc1ND1zdGF0aWMgaW50IGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzo3NTU6XFx0XFx0XFx0XFx0ICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTc1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtODAwLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzo4MDE6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBmZWxpeF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtODAyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6ODAzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTgwNC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9MTY3OD1zdGF0aWMgaW50IGZlbGl4X2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6MTY3OTpcXHRcXHRcXHRcXHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTE2ODAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTIzOTA9aW50IGZlbGl4X3JlZ2lzdGVyX3N3aXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHJlc291cmNlX3NpemVfdCBzd2l0Y2hfYmFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0yMzkyLVxcdFxcdFxcdCAgYm9vbCBtbV9zdXBwb3J0ZWQsXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjIzOTM6XFx0XFx0XFx0ICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgaW5pdF90YWdfcHJvdG8sXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzOTQtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZmVsaXhfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguaD04Nz1zdHJ1Y3QgZmVsaXgge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5oLTkzLVxcdHJlc291cmNlX3NpemVfdFxcdFxcdFxcdHN3aXRjaF9iYXNlO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguaDo5NDpcXHRlbnVtIGRzYV90YWdfcHJvdG9jb2xcXHRcXHR0YWdfcHJvdG87XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5oLTk1LVxcdGNvbnN0IHN0cnVjdCBmZWxpeF90YWdfcHJvdG9fb3BzICp0YWdfcHJvdG9fb3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5oPTEwMT1pbnQgZmVsaXhfcmVnaXN0ZXJfc3dpdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgcmVzb3VyY2Vfc2l6ZV90IHN3aXRjaF9iYXNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5oLTEwMy1cXHRcXHRcXHQgIGJvb2wgbW1fc3VwcG9ydGVkLFxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguaDoxMDQ6XFx0XFx0XFx0ICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgaW5pdF90YWdfcHJvdG8sXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5oLTEwNS1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmZWxpeF9pbmZvICppbmZvKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM9NDg1PXN0YXRpYyB2b2lkIGFyOTMzMV9zd19wb3J0X2Rpc2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtNDk1LVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM6NDk2OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgYXI5MzMxX3N3X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtNDk3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM6NDk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBtKVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtNDk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTE3Mzk9c3RhdGljIHUzMiBxY2E4a19nZXRfcGh5X2ZsYWdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjE3NTU6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE3NTYtcWNhOGtfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjE3NTc6XFx0XFx0ICAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNzU4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTE3ODI9c3RhdGljIGludCBxY2E4a19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTc4MzpcXHRcXHRcXHRcXHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTc4NC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jPTEwNDQ9cnRsODM2NW1iX2dldF9wb3J0X2V4dGludChzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2LCBpbnQgcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMTA2Mi1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jOjEwNjM6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbFxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMTA2NC1ydGw4MzY1bWJfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmM6MTA2NTpcXHRcXHRcXHQgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0xMDY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmM9MjkyMD1zdGF0aWMgaW50IHJ0bDgzNjVtYl9jaGFuZ2VfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jOjI5MjE6XFx0XFx0XFx0XFx0XFx0IGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jLTI5MjIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NnJiLmM9ODY2PXN0YXRpYyBpbnQgcnRsODM2NnJiX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjZyYi5jLTExMjktXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NnJiLmM6MTEzMDpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIHJ0bDgzNjZfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NnJiLmMtMTEzMS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYzoxMTMyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYy0xMTMzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM9ODE9c3RhdGljIHZvaWQgYTVwc3dfcmVnX3JtdyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBpbnQgb2Zmc2V0LCB1MzIgbWFzaywgdTMyIHZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtOTQtXFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzo5NTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGE1cHN3X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtOTYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM6OTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaD0xMTU9c3RydWN0IHNqYTExMDVfaW5mbyB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMTM2LVxcdGJvb2wgZml4ZWRfY2JzX21hcHBpbmc7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oOjEzNzpcXHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgdGFnX3Byb3RvO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0xMzgtXFx0Y29uc3Qgc3RydWN0IHNqYTExMDVfZHluYW1pY190YWJsZV9vcHMgKmR5bl9vcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0yMjU4PWludCBzamExMTA1X3N0YXRpY19jb25maWdfcmVsb2FkKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0yMzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjIzNTU6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbFxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTIzNTYtc2phMTEwNV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM6MjM1NzpcXHRcXHRcXHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTIzNTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM9MjY5MT1zdGF0aWMgaW50IHNqYTExMDVfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjI2OTI6XFx0XFx0XFx0XFx0XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTI2OTMte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3ZpdGVzc2UtdnNjNzN4eC1jb3JlLmM9NjYyPXN0YXRpYyBpbnQgdnNjNzN4eF9waHlfd3JpdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcGh5LCBpbnQgcmVnbnVtLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3ZpdGVzc2UtdnNjNzN4eC1jb3JlLmMtNjg1LVxcbmRyaXZlcnMvbmV0L2RzYS92aXRlc3NlLXZzYzczeHgtY29yZS5jOjY4NjpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIHZzYzczeHhfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL3ZpdGVzc2UtdnNjNzN4eC1jb3JlLmMtNjg3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS92aXRlc3NlLXZzYzczeHgtY29yZS5jOjY4ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXFxuZHJpdmVycy9uZXQvZHNhL3ZpdGVzc2UtdnNjNzN4eC1jb3JlLmMtNjg5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS94cnM3MDB4L3hyczcwMHguYz0xODU9c3RhdGljIGludCB4cnM3MDB4X3NldHVwX3JlZ21hcF9yYW5nZShzdHJ1Y3QgeHJzNzAweCAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS94cnM3MDB4L3hyczcwMHguYy0yMjUtXFxuZHJpdmVycy9uZXQvZHNhL3hyczcwMHgveHJzNzAweC5jOjIyNjpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIHhyczcwMHhfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL3hyczcwMHgveHJzNzAweC5jLTIyNy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EveHJzNzAweC94cnM3MDB4LmM6MjI4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtKVxcbmRyaXZlcnMvbmV0L2RzYS94cnM3MDB4L3hyczcwMHguYy0yMjkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jPTQyODA9c3RhdGljIGludCB5dDkyMXhfcG9ydF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTQzMjAtXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjQzMjE6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbFxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy00MzIyLXl0OTIxeF9kc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYzo0MzIzOlxcdFxcdFxcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNDMyNC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM9NTM4MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyB5dDkyMnhfcGh5bGlua19tYWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTUzODYtXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjUzODc6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbFxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy01Mzg4LXl0OTIyeF9kc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYzo1Mzg5OlxcdFxcdFxcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNTM5MC17XFxuLS1cXG5pbmNsdWRlL25ldC9kc2EuaD0yNj1zdHJ1Y3QgdGNfYWN0aW9uO1xcbi0tXFxuaW5jbHVkZS9uZXQvZHNhLmgtNjQtXFxuaW5jbHVkZS9uZXQvZHNhLmg6NjU6ZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcXG5pbmNsdWRlL25ldC9kc2EuaC02Ni1cXHREU0FfVEFHX1BST1RPX05PTkVcXHRcXHQ9IERTQV9UQUdfUFJPVE9fTk9ORV9WQUxVRSxcXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oPTEwNj1zdHJ1Y3QgZHNhX2RldmljZV9vcHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvZHNhLmgtMTE1LVxcdGNvbnN0IGNoYXIgKm5hbWU7XFxuaW5jbHVkZS9uZXQvZHNhLmg6MTE2OlxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bztcXG5pbmNsdWRlL25ldC9kc2EuaC0xMTctXFx0LyogU29tZSB0YWdnaW5nIHByb3RvY29scyBlaXRoZXIgbWFuZ2xlIG9yIHNoaWZ0IHRoZSBkZXN0aW5hdGlvbiBNQUNcXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oPTEzMz1zdHJ1Y3QgZHNhX3N3aXRjaF90cmVlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oLTE1OC1cXHQgKi9cXG5pbmNsdWRlL25ldC9kc2EuaDoxNTk6XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIGRlZmF1bHRfcHJvdG87XFxuaW5jbHVkZS9uZXQvZHNhLmgtMTYwLVxcbi0tXFxuaW5jbHVkZS9uZXQvZHNhLmg9ODY0PXN0cnVjdCBkc2Ffc3dpdGNoX29wcyB7XFxuLS1cXG5pbmNsdWRlL25ldC9kc2EuaC04NzEtXFx0ICovXFxuaW5jbHVkZS9uZXQvZHNhLmg6ODcyOlxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCAoKmdldF90YWdfcHJvdG9jb2wpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5pbmNsdWRlL25ldC9kc2EuaC04NzMtXFx0XFx0XFx0XFx0XFx0XFx0ICBpbnQgcG9ydCxcXG5pbmNsdWRlL25ldC9kc2EuaDo4NzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXByb3QpO1xcbmluY2x1ZGUvbmV0L2RzYS5oLTg3NS1cXHRpbnRcXHQoKmNoYW5nZV90YWdfcHJvdG9jb2wpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5pbmNsdWRlL25ldC9kc2EuaDo4NzY6XFx0XFx0XFx0XFx0ICAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90byk7XFxuaW5jbHVkZS9uZXQvZHNhLmgtODc3LVxcdC8qXFxuLS1cXG5pbmNsdWRlL25ldC9kc2EuaC04ODItXFx0aW50XFx0KCpjb25uZWN0X3RhZ19wcm90b2NvbCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmluY2x1ZGUvbmV0L2RzYS5oOjg4MzpcXHRcXHRcXHRcXHRcXHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pO1xcbmluY2x1ZGUvbmV0L2RzYS5oLTg4NC1cXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jPTM0MD1zdGF0aWMgc3NpemVfdCB0YWdnaW5nX3Nob3coc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYy0zNDYtXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsXFxubmV0L2RzYS9jb25kdWl0LmM6MzQ3OlxcdFxcdCAgICAgICBkc2FfdGFnX3Byb3RvY29sX3RvX3N0cihjcHVfZHAtXFx1MDAzZXRhZ19vcHMpKTtcXG5uZXQvZHNhL2NvbmR1aXQuYy0zNDgtfVxcbi0tXFxubmV0L2RzYS9jb25kdWl0LmM9NDE5PWludCBkc2FfY29uZHVpdF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcClcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jLTQyNS1cXG5uZXQvZHNhL2NvbmR1aXQuYzo0MjY6XFx0bXR1ID0gRVRIX0RBVEFfTEVOICsgZHNhX3RhZ19wcm90b2NvbF9vdmVyaGVhZCh0YWdfb3BzKTtcXG5uZXQvZHNhL2NvbmR1aXQuYy00MjctXFxuLS1cXG5uZXQvZHNhL2RzYS5jPTExMjI9c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV9kc2Eoc3RydWN0IGRzYV9wb3J0ICpkcClcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTEyOC1cXG5uZXQvZHNhL2RzYS5jOjExMjk6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBkc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxcbm5ldC9kc2EvZHNhLmMtMTEzMC1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0KVxcbm5ldC9kc2EvZHNhLmMtMTEzMS17XFxubmV0L2RzYS9kc2EuYzoxMTMyOlxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCB0YWdfcHJvdG9jb2wgPSBEU0FfVEFHX1BST1RPX05PTkU7XFxubmV0L2RzYS9kc2EuYy0xMTMzLVxcdHN0cnVjdCBkc2Ffc3dpdGNoICptZHMsICpkcyA9IGRwLVxcdTAwM2VkcztcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTE1NT1zdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX2NwdShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTE2MC1cXHRzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkcy1cXHUwMDNlZHN0O1xcbm5ldC9kc2EvZHNhLmM6MTE2MTpcXHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgZGVmYXVsdF9wcm90bztcXG5uZXQvZHNhL2RzYS5jLTExNjItXFxuLS1cXG5uZXQvZHNhL3RhZy5jPTE2OD1FWFBPUlRfU1lNQk9MX0dQTChkc2FfdGFnX2RyaXZlcnNfdW5yZWdpc3Rlcik7XFxubmV0L2RzYS90YWcuYy0xNjktXFxubmV0L2RzYS90YWcuYzoxNzA6Y29uc3QgY2hhciAqZHNhX3RhZ19wcm90b2NvbF90b19zdHIoY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzICpvcHMpXFxubmV0L2RzYS90YWcuYy0xNzEte1xcbi0tXFxubmV0L2RzYS90YWcuaD0yND12b2lkIGRzYV90YWdfZHJpdmVyX3B1dChjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgKm9wcyk7XFxubmV0L2RzYS90YWcuaDoyNTpjb25zdCBjaGFyICpkc2FfdGFnX3Byb3RvY29sX3RvX3N0cihjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgKm9wcyk7XFxubmV0L2RzYS90YWcuaC0yNi1cXG5uZXQvZHNhL3RhZy5oOjI3OnN0YXRpYyBpbmxpbmUgaW50IGRzYV90YWdfcHJvdG9jb2xfb3ZlcmhlYWQoY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzICpvcHMpXFxubmV0L2RzYS90YWcuaC0yOC17XFxuLS1cXG5uZXQvZHNhL3VzZXIuYz0yMTAyPWludCBkc2FfdXNlcl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbi0tXFxubmV0L2RzYS91c2VyLmMtMjE0MS1cXG5uZXQvZHNhL3VzZXIuYzoyMTQyOlxcdG92ZXJoZWFkID0gZHNhX3RhZ19wcm90b2NvbF9vdmVyaGVhZChjcHVfZHAtXFx1MDAzZXRhZ19vcHMpO1xcbm5ldC9kc2EvdXNlci5jLTIxNDMtXFx0bXR1X2xpbWl0ID0gbWluX3QoaW50LCBjb25kdWl0LVxcdTAwM2VtYXhfbXR1LCBkZXYtXFx1MDAzZW1heF9tdHUgKyBvdmVyaGVhZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjIxOjU1LjU4MjY1MTc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1MTk5MjQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBDb25kdWl0IFRhZ2dpbmcgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgc28gSSdtIHBva2luZyBhcm91bmQgaW4gYG5ldC9kc2EvY29uZHVpdC5jYCBhbmQgc2VlIHRoZXNlIGZ1bmN0aW9ucywgYHRhZ2dpbmdfc2hvd2AgYW5kIGB0YWdnaW5nX3N0b3JlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkhtbSwgc291bmRzIGxpa2UgdGhpcyBtaWdodCBiZSB3aGVyZSB0aGUgY29uZHVpdCB0YWdnaW5nIGNvbmZpZ3VyYXRpb24gbGl2ZXMuXCIgQnV0IEkgY2FuJ3QganVzdCBhc3N1bWUgYW55dGhpbmcsIHNvIEkgc2hvdWxkIHNlZSBpZiBgdGFnZ2luZ19zdG9yZWAgYWN0dWFsbHkgZXhpc3RzIGFzIGEgZnVuY3Rpb24uIEknbSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCdzIGRlZmluZWQgYmVmb3JlIEkgdHJ5IHRvIGludGVycHJldCB0aGUgY29udGV4dCwgb3IgYmVmb3JlIEkgZ28gcG9raW5nIGFyb3VuZCBpbiB0aGUgZnVuY3Rpb24ncyBjb2RlLiBHb3R0YSBiZSBtZXRob2RpY2FsIGFib3V0IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzcwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjE6NTkuNzM0NjQ3ODI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTE1MTkyMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFnZ2luZ19zdG9yZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZHNhL2NvbmR1aXQuYz0zNDA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zaG93KHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubmV0L2RzYS9jb25kdWl0LmMtMzQ5LVxcbm5ldC9kc2EvY29uZHVpdC5jOjM1MDpzdGF0aWMgc3NpemVfdCB0YWdnaW5nX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbm5ldC9kc2EvY29uZHVpdC5jLTM1MS1cXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMjoyMjowMS42MjYxNzQ1MzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjIzMzEyOTY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBUYWcgUHJvdG9jb2w6IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgZHluYW1pY2FsbHkgY2hhbmdpbmcgdGhlIHRhZyBwcm90b2NvbCBvZiBhIERTQSBzd2l0Y2gsIHNwZWNpZmljYWxseSB0aGUgYERTQV9UQUdfUFJPVE9fWVQ5MjJYYCBwcm90b2NvbCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSB2dWxuZXJhYmlsaXR5IHNwYWNlLiBJIHNlZSB0aGF0IHRoZSBgdGFnZ2luZ19zdG9yZWAgc3lzZnMgZW50cnkgaW4gYG5ldC9kc2EvY29uZHVpdC5jYCBhbGxvd3MgZHluYW1pYyBjaGFuZ2VzLCB3aGljaCBpcyBncmVhdCwgYnV0IGl0J3Mgbm90IHRoZSBmdWxsIHN0b3J5LiBUaGlzIGVudHJ5IGNhbGxzIGBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG9jb2xgLCB3aGljaCwgaW4gdHVybiwgY2FsbHMgYGRzLVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2VfdGFnX3Byb3RvY29sYC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJZiB0aGUgc3dpdGNoIGRyaXZlciBkb2Vzbid0IGltcGxlbWVudCBgY2hhbmdlX3RhZ19wcm90b2NvbGAsIHRoZSBhdHRlbXB0IHRvIGNoYW5nZSB0aGUgdGFnIHByb3RvY29sIHdpbGwgZmFpbC5cblxuVGhlIGltbWVkaWF0ZSBwcm9ibGVtIGlzIHRoYXQgYGRzYV9sb29wYCwgd2hpY2ggaXMgYSBjb21tb25seSB1c2VkIG1vY2sgZHJpdmVyLCAqZG9lc24ndCogaW1wbGVtZW50IGBjaGFuZ2VfdGFnX3Byb3RvY29sYC4gU28sIHN0cmFpZ2h0Zm9yd2FyZCBtb2RpZmljYXRpb24gb2YgaXRzIHByb3RvY29sIGlzIG91dC4gTW9kaWZ5aW5nIHRoZSBgZHNhX2xvb3BgIGRyaXZlciBpdHNlbGYgaXMgYSBub24tc3RhcnRlci4gSSBuZWVkIHRvIGZpbmQgYW5vdGhlciBEU0Egc3dpdGNoIGRyaXZlciB0aGF0IEkgKmNhbiogYWN0dWFsbHkgaW5zdGFudGlhdGUgd2l0aGluIG15IHRlc3RpbmcgZW52aXJvbm1lbnQuXG5cbkknbSB3b3JraW5nIGluIGEgc3RhbmRhcmQgeDg2XzY0IFFFTVUgZW52aXJvbm1lbnQsIG5vdCBzb21lIHNwZWNpYWxpemVkIGBzYW5kYm94YCBhcmNoaXRlY3R1cmUsIHdoaWNoIGxpbWl0cyBteSBvcHRpb25zLiBJJ20gaGl0dGluZyBhIHJvYWRibG9jay4gQ2FuIEkgc29tZWhvdyBpbnN0YW50aWF0ZSBhIERTQSBzd2l0Y2ggdGhhdCAqdXNlcyogYERTQV9UQUdfUFJPVE9fWVQ5MjJYYD8gVGhlIGRyaXZlciBhc3NvY2lhdGVkIHdpdGggdGhhdCBpcyBgeXQ5MjF4LmNgLCBhIGRyaXZlciBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUvWVQ5MjI0IHN3aXRjaCBjaGlwcy4gQ3J1Y2lhbGx5LCBpdCdzIGFuIE1ESU8gZGV2aWNlIGRyaXZlci5cblxuQ2FuIEkgaW5zdGFudGlhdGUgYW4gTURJTyBkZXZpY2UgdmlhIHN5c2ZzPyBJIGtub3cgSTJDIGFuZCBTUEkgaGF2ZSBzb21lIG1lY2hhbmlzbXMsIGJ1dCBNRElPIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGEgZ2VuZXJpYyBgbmV3X2RldmljZWAgYXR0cmlidXRlLiBJcyB0aGVyZSBhIGJhY2tkb29yPyBJIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgaW5qZWN0aW5nIE1ESU8gZGV2aWNlcyB1c2luZyBzb21ldGhpbmcgbGlrZSBgbWRpby1tb2NrYCBvciBgbWRpby1ncGlvYCwgYnV0IHN5emthbGxlciBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhIGRpcmVjdCBtZWFucyB0byBjcmVhdGUgYXJiaXRyYXJ5IE1ESU8gZGV2aWNlcywgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBmdXp6ZXIgc2V0dXAuXG5cblRoZSBgZHNhX2xvb3BgIGRyaXZlciBpcyBpbnN0YW50aWF0ZWQgdGhyb3VnaCBgZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2YCwgd2hpY2ggcmVnaXN0ZXJzIGEgKmZpeGVkKiBNRElPIGRldmljZS4gTm8gbHVjayB0aGVyZS4gV2hhdCBhYm91dCBsb2FkaW5nIHRoZSBgeXQ5Mnh4X21kaW9fZHJpdmVyYCBkaXJlY3RseT9cblxuTG9va2luZyBhdCB0aGUgZHJpdmVyJ3MgZGV2aWNlIG1hdGNoIHRhYmxlOlxuYGBgY1xuc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5Mnh4X29mX21hdGNoW10gPSB7XG5cdHtcblx0XHQuY29tcGF0aWJsZSA9IFwibW90b3Jjb21tLHl0OTIxNVwiLFxuXHRcdC5kYXRhID0gXHUwMDI2eXQ5Mnh4X2NoaXBfaW5mb190YWJsZVtZVDkyMTVdLFxuXHR9LFxuXHR7XG5cdFx0LmNvbXBhdGlibGUgPSBcIm1vdG9yY29tbSx5dDkyMjRcIixcblx0XHQuZGF0YSA9IFx1MDAyNnl0OTJ4eF9jaGlwX2luZm9fdGFibGVbWVQ5MjI0XSxcblx0fSxcblx0e31cbn07XG5gYGBcblRoaXMgaXMgYSBkZXZpY2UtdHJlZSBkcml2ZW4gZHJpdmVyLiBXaXRob3V0IERldmljZSBUcmVlLCBgb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldilgIHdpbGwgcmV0dXJuIE5VTEwsIGFuZCB0aGUgcHJvYmUgd2lsbCBmYWlsIHdpdGggYC1FSU5WQUxgLiBUaGUgZHJpdmVyIHVzZXMgdGhlIGZvbGxvd2luZyBjb2RlOlxuYGBgY1xuXHRjb21wYXRfaW5mbyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xuXHRpZiAoIWNvbXBhdF9pbmZvKVxuXHRcdHJldHVybiAtRUlOVkFMO1xuYGBgXG5FdmVuIGlmIEkgKmNvdWxkKiBzb21laG93IGJpbmQgdGhpcyBkcml2ZXIgdG8gYW4gTURJTyBkZXZpY2UgKHRocm91Z2gsIHNheSwgYSBgYmluZGAgc3lzZnMgb3BlcmF0aW9uKSwgaXQgd291bGQgZmFpbCBiZWNhdXNlIHRoZSBuZWNlc3NhcnkgYG9mX25vZGVgIHdpdGggdGhlIG1hdGNoaW5nIGNvbXBhdGlibGUgc3RyaW5nIChcIm1vdG9yY29tbSx5dDkyMTVcIiBvciBcIm1vdG9yY29tbSx5dDkyMjRcIikgd291bGQgYmUgYWJzZW50IGluIG15IHN0YW5kYXJkIFFFTVUgc2V0dXAuIFRoZSBwcm9iZSAqd2lsbCogYWx3YXlzIGZhaWwgaW4gYSBub24tRGV2aWNlIFRyZWUgZW52aXJvbm1lbnQuXG5cbldoYXQgaWYgSSdtIHJ1bm5pbmcgc3l6a2FsbGVyIG9uIGFuIEFSTTY0IFFFTVUgd2l0aCBhIGRldmljZSB0cmVlPyBTeXprYWxsZXIgKmRvZXMqIHJ1biBvbiBBUk02NCwgYnV0IGl0IGRvZXNuJ3QgZHluYW1pY2FsbHkgZ2VuZXJhdGUgRFQgbm9kZXMgZm9yIGFyYml0cmFyeSBkcml2ZXJzLiBJdCB1c2VzIGEgZml4ZWQgRGV2aWNlIFRyZWUgcHJvdmlkZWQgd2l0aCB0aGUgc3l6a2FsbGVyIGltYWdlLiBTbywgdW5sZXNzIHRoZSBEZXZpY2UgVHJlZSBzcGVjaWZpY2FsbHkgaW5jbHVkZXMgZWl0aGVyIFwibW90b3Jjb21tLHl0OTIxNVwiIG9yIFwibW90b3Jjb21tLHl0OTIyNFwiIGVudHJpZXMsIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUsIHdoaWNoIGlzIGFsbW9zdCBjZXJ0YWlubHkgbm90IHRoZSBjYXNlIGZvciBnZW5lcmljIGltYWdlcy4gVW5mb3J0dW5hdGVseSwgc3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIGBzeXpfZGV2bGlua2AgcHNldWRvLXN5c2NhbGwgdGhhdCBjb3VsZCBjcmVhdGUgYW4gTURJTyBkZXZpY2UgZWl0aGVyLiBEZXZsaW5rIGlzIGZvciBkZXZsaW5rIGRldmljZXMgb25seS5cblxuSSBoYXZlIHRvIGNvbnNpZGVyIGlmIHRoZSB0YWcgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYHRhZ195dDkyMXguY2AsIGlzIHJlYWNoYWJsZSBpbiBhbnkgb3RoZXIgd2F5LiBJdCdzIHJlZ2lzdGVyZWQgdmlhIGBtb2R1bGVfZHNhX3RhZ19kcml2ZXJzKGRzYV90YWdfZHJpdmVyX2FycmF5KWAgYW5kIHJlZ2lzdGVycyBgXG5cbiIsIklucHV0VG9rZW5zIjo0MDEwOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjI6MjcuODU5MzA5MTc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDIzNzAwNzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuY2hhbmdlX3RhZ19wcm90b2NvbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz03MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXY4OGU2eHh4X3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNzE4OC1cXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gbXY4OGU2eHh4X2dldF90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6NzE4OTpcXHQuY2hhbmdlX3RhZ19wcm90b2NvbFxcdD0gbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNzE5MC1cXHQuc2V0dXBcXHRcXHRcXHQ9IG12ODhlNnh4eF9zZXR1cCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz0yMzA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZmVsaXhfc3dpdGNoX29wcyA9IHtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwNy1cXHQuZ2V0X3RhZ19wcm90b2NvbFxcdFxcdD0gZmVsaXhfZ2V0X3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6MjMwODpcXHQuY2hhbmdlX3RhZ19wcm90b2NvbFxcdFxcdD0gZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwOS1cXHQuY29ubmVjdF90YWdfcHJvdG9jb2xcXHRcXHQ9IGZlbGl4X2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYz0zMjg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgcnRsODM2NW1iX3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0zMjg2LVxcdC5nZXRfdGFnX3Byb3RvY29sID0gcnRsODM2NW1iX2dldF90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYzozMjg3OlxcdC5jaGFuZ2VfdGFnX3Byb3RvY29sID0gcnRsODM2NW1iX2NoYW5nZV90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0zMjg4LVxcdC5zZXR1cCA9IHJ0bDgzNjVtYl9zZXR1cCxcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTE1NT1zdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX2NwdShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTIzMC1cXHQgKiBkc2Ffc3dpdGNoX3NldHVwX3RhZ19wcm90b2NvbCBvbmNlIC5zZXR1cCBoYXMgcnVuIGFuZCB0aGVcXG5uZXQvZHNhL2RzYS5jOjEyMzE6XFx0ICogZHJpdmVyIGlzIHJlYWR5IHRvIGFjY2VwdCBjYWxscyB0byAuY2hhbmdlX3RhZ19wcm90b2NvbC4gSWZcXG5uZXQvZHNhL2RzYS5jLTEyMzItXFx0ICogdGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjdXN0b20gcHJvdG9jb2wgYXQgdGhhdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMjoyMjozMC4yODMwMjE5NzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyNDkxMjg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBjaGFuZ2VfdGFnX3Byb3RvY29sYCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBkcml2ZXJzIHRoYXQgYWN0dWFsbHkgaGFuZGxlIHRoZSBgY2hhbmdlX3RhZ19wcm90b2NvbGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2Ugd2UndmUgZ290IGBtdjg4ZTZ4eHhgLCBgZmVsaXhgLCBhbmQgYHJ0bDgzNjVtYmAgbGlzdGVkLiBNeSBmaXJzdCBxdWVzdGlvbiBpcywgY2FuIGFueSBvZiB0aGVzZSBiZSBlZmZlY3RpdmVseSB0ZXN0ZWQgb3IgZXhwZXJpbWVudGVkIHdpdGggaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50PyBJdCB3b3VsZCBtYWtlIGRlYnVnZ2luZyBhbmQgZGV2ZWxvcG1lbnQgYSBsb3QgZWFzaWVyLlxuXG5Ob3csIEkgcmVjYWxsIGBtdjg4ZTZ4eHhgIGlzIGFuIE1ESU8gZHJpdmVyLiBUaGF0IGZlZWxzIG1hbmFnZWFibGUgaW4gYSB2aXJ0dWFsIHNldHVwLCBwb3RlbnRpYWxseSB0aHJvdWdoIGVtdWxhdGlvbiBvZiBhbiBNRElPIGJ1cy4gSG93ZXZlciwgYGZlbGl4YOKApiB0aGF0J3MgYW4gaW50ZXJlc3RpbmcgY2FzZS4gSSB2YWd1ZWx5IHJlbWVtYmVyIGl0IGJlaW5nIGEgUENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgTlhQIFZTQzk5NTkuIEJ1dCBob2xkIG9uLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgKmlzKiBhIFBDSSBkcml2ZXIgdG8gdW5kZXJzdGFuZCB0aGUgdmlydHVhbCBlbnZpcm9ubWVudCBpbXBsaWNhdGlvbnMuIExldCBtZSB0YWtlIGEgcXVpY2sgcGVlayBhdCBgZmVsaXhfdnNjOTk1OS5jYCBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucy4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgYmVzdCB0byBkZXZlbG9wIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDA3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjIyOjM1LjgwNzkzOTY2NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MzY0MDI5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZWxpeF92c2M5OTU5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvTWFrZWZpbGU9Nz1tc2NjX2ZlbGl4X2RzYV9saWItb2JqcyA6PSBmZWxpeC5vXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9NYWtlZmlsZTo4Om1zY2NfZmVsaXgtb2JqcyA6PSBmZWxpeF92c2M5OTU5Lm9cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L01ha2VmaWxlLTktbXNjY19vY2Vsb3RfZXh0LW9ianMgOj0gb2NlbG90X2V4dC5vXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0yNzQ1PU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBmZWxpeF9pZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTI3NDYtXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6Mjc0NzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZmVsaXhfdnNjOTk1OV9wY2lfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTI3NDgtXFx0Lm5hbWVcXHRcXHQ9IFxcXCJtc2NjX2ZlbGl4XFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTI3NTMtfTtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoyNzU0Om1vZHVsZV9wY2lfZHJpdmVyKGZlbGl4X3ZzYzk5NTlfcGNpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjc1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjI6MzcuODgxNTg2ODc1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MTcyNTk4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgRHJpdmVyIENvbXBhdGliaWxpdHkgYW5kIFBvdGVudGlhbCBQcm90b2NvbCBNYW5pcHVsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZmVsaXhfdnNjOTk1OWAuIFJpZ2h0LCBpdCAqaXMqIGEgUENJIGRyaXZlciwgYnV0IHRoZSBwcm9ibGVtIGlzIGl0J3MgdGllZCBzcGVjaWZpY2FsbHkgdG8gdGhlIE5YUCBWU0M5OTU5IGRldmljZSwgYW5kIHRoYXQncyBub3Qgc29tZXRoaW5nIHlvdSdsbCBmaW5kIGVtdWxhdGVkIGluIGEgdHlwaWNhbCBRRU1VIHNldHVwLiBUaGF0J3MgYSBkZWZpbml0ZSByb2FkYmxvY2suIEhtbeKApiB3aGF0IGFib3V0IGBydGw4MzY1bWJgPyBJdOKAmXMgYW4gTURJTyBkcml2ZXIsIHBvdGVudGlhbGx5IG9mZmVyaW5nIGEgZGlmZmVyZW50IGF2ZW51ZS5cblxuTm93LCBob2xkIG9uLiBBIHRob3VnaHQgaXMgZW1lcmdpbmcuIENhbiB3ZSBtYW5pcHVsYXRlIHRoZSB0YWdnaW5nIHByb3RvY29sIG9uIGEgc3dpdGNoPyBQZXJoYXBzLCBzb21laG93LCB3ZSBjb3VsZCBjaGFuZ2UgaXQgdG8gYW4gYXJiaXRyYXJ5IG9uZT8gVGhhdCBjb3VsZCBvcGVuIHNvbWUgaW50ZXJlc3RpbmcgZG9vcnMuIExldCdzIHNlZS4uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGBmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sYCB0byB1bmRlcnN0YW5kIHRoaXMgZGlyZWN0aW9uIGZ1cnRoZXIuIFRoYXQgbWlnaHQgcHJvdmlkZSB0aGUgYW5zd2VyIEknbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3NzUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMjoyMjo0Mi43OTg4NTA1MjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTI1NTAyNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9NzMyPWZlbGl4X3RhZ19wcm90b19zZXR1cF9zaGFyZWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTc1My0gKi9cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6NzU0OnN0YXRpYyBpbnQgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTc1NS1cXHRcXHRcXHRcXHQgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz0xNjk2PXN0YXRpYyBpbnQgZmVsaXhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTE3NTEtXFx0ICovXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjE3NTI6XFx0ZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbChkcywgZmVsaXgtXFx1MDAzZXRhZ19wcm90byk7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTE3NTMtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9MjMwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGZlbGl4X3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzMDctXFx0LmdldF90YWdfcHJvdG9jb2xcXHRcXHQ9IGZlbGl4X2dldF90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjIzMDg6XFx0LmNoYW5nZV90YWdfcHJvdG9jb2xcXHRcXHQ9IGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzMDktXFx0LmNvbm5lY3RfdGFnX3Byb3RvY29sXFx0XFx0PSBmZWxpeF9jb25uZWN0X3RhZ19wcm90b2NvbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjI6NDQuNzkxNDA4NTA4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDE0MjM0MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2xgIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbGAuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hhdCdzIGl0cyBpbnRlbmRlZCBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBGZWxpeCBlY29zeXN0ZW0/IElzIGl0IGEgY29yZSBmdW5jdGlvbiwgYSB1dGlsaXR5LCBvciBzb21ldGhpbmcgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIHVzZSBjYXNlIG9yIGNvbXBvbmVudD8gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIGFuZCBjb250ZXh0LlxuXG5HaXZlbiB0aGUgbmFtZSwgXCJjaGFuZ2VfdGFnX3Byb3RvY29sXCIsIEknbSBiZXR0aW5nIHRoaXMgaXMgcmVsYXRlZCB0byBob3cgRmVsaXggaGFuZGxlcyB0YWdnaW5nLiBQZXJoYXBzIGl0J3MgaW52b2x2ZWQgaW4gbW9kaWZ5aW5nIHRoZSBwcm90b2NvbCB1c2VkIGZvciBjb21tdW5pY2F0aW9uIG9mIHRhZ3MgYmV0d2VlbiBlbmRwb2ludHMsIG9yIG1heWJlIGl0J3MgcmVsYXRlZCB0byBob3cgdGFncyB0aGVtc2VsdmVzIGFyZSBlbmNvZGVkIG9yIGludGVycHJldGVkLiBUaGUgdGVybSBcInByb3RvY29sXCIgbWFrZXMgbWUgdGhpbmsgb2YgdW5kZXJseWluZyBuZXR3b3JrIGNvbW11bmljYXRpb25zIG9yIHNlcmlhbGl6YXRpb24gZm9ybWF0cy4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGlzIGFib3V0IHN3aXRjaGluZyBiZXR3ZWVuIElQIHNldHMsIElQIHRhYmxlcywgZUJQRiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkgZm9yIHRhZyBlbmZvcmNlbWVudC5cblxuSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIGFueSBkb2N1bWVudGF0aW9uLCBhbmQgaG9wZWZ1bGx5LCByZWxldmFudCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGluIHRoZSBjb2RlYmFzZS4gVW5kZXJzdGFuZGluZyB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzLCBhcyB3ZWxsIGFzIGFueSBzaWRlIGVmZmVjdHMsIHdpbGwgYmUgY3J1Y2lhbC4gSSdtIGludGVyZXN0ZWQgaW4gdGhlIGVycm9yIGhhbmRsaW5nIOKAkyBob3cgZG9lcyBpdCBkZWFsIHdpdGggaW52YWxpZCBvciBjb25mbGljdGluZyBpbnB1dHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8gd29ycnkgYWJvdXQ/IERvZXMgdGhpcyBmdW5jdGlvbiBoYXZlIGFueSBpbXBhY3Qgb24gZGF0YSBjb25zaXN0ZW5jeSBhY3Jvc3MgdGhlIGRpc3RyaWJ1dGVkIHN5c3RlbT9cblxuVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBncmFzcCB0aGUgY29yZSBsb2dpYyBvZiBgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbGAgYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIHN0YWJpbGl0eSBvZiB0aGUgRmVsaXggZGVwbG95bWVudC4gSSBleHBlY3QgYSBjYXJlZnVsIGluc3BlY3Rpb24gd2lsbCBiZSBuZWVkZWQgdG8gdHJ1bHkgdW5kZXJzdGFuZCBob3cgaXQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDUyOCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjIyOjU0LjgwNTY0NjA3OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzkwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1NCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc1NDpcXHRzdGF0aWMgaW50IGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbiA3NTU6XFx0XFx0XFx0XFx0XFx0ICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuIDc1NjpcXHR7XFxuIDc1NzpcXHRcXHRjb25zdCBzdHJ1Y3QgZmVsaXhfdGFnX3Byb3RvX29wcyAqb2xkX3Byb3RvX29wcywgKnByb3RvX29wcztcXG4gNzU4OlxcdFxcdHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCA9IGRzLVxcdTAwM2Vwcml2O1xcbiA3NTk6XFx0XFx0c3RydWN0IGZlbGl4ICpmZWxpeCA9IG9jZWxvdF90b19mZWxpeChvY2Vsb3QpO1xcbiA3NjA6XFx0XFx0aW50IGVycjtcXG4gNzYxOlxcdFxcbiA3NjI6XFx0XFx0c3dpdGNoIChwcm90bykge1xcbiA3NjM6XFx0XFx0Y2FzZSBEU0FfVEFHX1BST1RPX1NFVklMTEU6XFxuIDc2NDpcXHRcXHRjYXNlIERTQV9UQUdfUFJPVE9fT0NFTE9UOlxcbiA3NjU6XFx0XFx0XFx0cHJvdG9fb3BzID0gXFx1MDAyNmZlbGl4X3RhZ19ucGlfcHJvdG9fb3BzO1xcbiA3NjY6XFx0XFx0XFx0YnJlYWs7XFxuIDc2NzpcXHRcXHRjYXNlIERTQV9UQUdfUFJPVE9fT0NFTE9UXzgwMjFROlxcbiA3Njg6XFx0XFx0XFx0cHJvdG9fb3BzID0gXFx1MDAyNmZlbGl4X3RhZ184MDIxcV9wcm90b19vcHM7XFxuIDc2OTpcXHRcXHRcXHRicmVhaztcXG4gNzcwOlxcdFxcdGRlZmF1bHQ6XFxuIDc3MTpcXHRcXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG4gNzcyOlxcdFxcdH1cXG4gNzczOlxcdFxcbiA3NzQ6XFx0XFx0b2xkX3Byb3RvX29wcyA9IGZlbGl4LVxcdTAwM2V0YWdfcHJvdG9fb3BzO1xcbiA3NzU6XFx0XFxuIDc3NjpcXHRcXHRpZiAocHJvdG9fb3BzID09IG9sZF9wcm90b19vcHMpXFxuIDc3NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzc4OlxcdFxcbiA3Nzk6XFx0XFx0ZXJyID0gcHJvdG9fb3BzLVxcdTAwM2VzZXR1cChkcyk7XFxuIDc4MDpcXHRcXHRpZiAoZXJyKVxcbiA3ODE6XFx0XFx0XFx0Z290byBzZXR1cF9mYWlsZWQ7XFxuIDc4MjpcXHRcXG4gNzgzOlxcdFxcdGVyciA9IGZlbGl4X3RhZ19wcm90b19zZXR1cF9zaGFyZWQoZHMsIHByb3RvX29wcywgb2xkX3Byb3RvX29wcyk7XFxuIDc4NDpcXHRcXHRpZiAoZXJyKVxcbiA3ODU6XFx0XFx0XFx0Z290byBzZXR1cF9zaGFyZWRfZmFpbGVkO1xcbiA3ODY6XFx0XFxuIDc4NzpcXHRcXHRpZiAob2xkX3Byb3RvX29wcylcXG4gNzg4OlxcdFxcdFxcdG9sZF9wcm90b19vcHMtXFx1MDAzZXRlYXJkb3duKGRzKTtcXG4gNzg5OlxcdFxcbiA3OTA6XFx0XFx0ZmVsaXgtXFx1MDAzZXRhZ19wcm90b19vcHMgPSBwcm90b19vcHM7XFxuIDc5MTpcXHRcXHRmZWxpeC1cXHUwMDNldGFnX3Byb3RvID0gcHJvdG87XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdHJldHVybiAwO1xcbiA3OTQ6XFx0XFxuIDc5NTpcXHRzZXR1cF9zaGFyZWRfZmFpbGVkOlxcbiA3OTY6XFx0XFx0cHJvdG9fb3BzLVxcdTAwM2V0ZWFyZG93bihkcyk7XFxuIDc5NzpcXHRzZXR1cF9mYWlsZWQ6XFxuIDc5ODpcXHRcXHRyZXR1cm4gZXJyO1xcbiA3OTk6XFx0fVxcbiA4MDA6XFx0XFxuIDgwMTpcXHRzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGZlbGl4X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbiA4MDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBwb3J0LFxcbiA4MDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjI6NTQuODA1OTI3ODk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMzY3OTY0ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipNeSBJbW1lZGlhdGUgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYW5kIGl0J3MgY2xlYXIgdGhlIHN5c3RlbSdzIGN1cnJlbnQgc3VwcG9ydCBpcyBwcmV0dHkgbGltaXRlZC4gSXQgc2VlbXMgdG8gb25seSByZWNvZ25pemUgdGhlc2UgRFNBIHByb3RvY29sczogYERTQV9UQUdfUFJPVE9fU0VWSUxMRWAsIGBEU0FfVEFHX1BST1RPX09DRUxPVGAsIGFuZCBgRFNBX1RBR19QUk9UT19PQ0VMT1RfODAyMVFgLiBUaGF0J3MgYSBkZWNlbnQgc3RhcnQsIGJ1dCBpbW1lZGlhdGVseSBteSBtaW5kIGp1bXBzIHRvIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgdGhlIHNwZWNpZmljIGhhcmR3YXJlIEkga25vdyB3ZSBuZWVkIHRvIGFkZHJlc3MuIFdoYXQgYWJvdXQgc3VwcG9ydCBmb3IgdGhlIGBtdjg4ZTZ4eHhgIGZhbWlseT8gSXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiBtYW55IG9mIG91ciBhcHBsaWNhdGlvbnMuIEFyZSB3ZSBuZWdsZWN0aW5nIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZSwgb3IgaXMgdGhpcyBqdXN0IHRoZSBzdGFydGluZyBwb2ludD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhpcyBpcyBhbiBvdmVyc2lnaHQsIGEgZGVsaWJlcmF0ZSBjaG9pY2UsIG9yIGlmIHN1cHBvcnQgaXMgcGxhbm5lZCBmb3IgdGhpcyBicm9hZGVyIHJhbmdlIG9mIE1hcnZlbGwgc3dpdGNoZXMuIFRoaXMgZGV0YWlsIGlzIGNydWNpYWwgZm9yIGFzc2Vzc2luZyB0aGUgc3lzdGVtJ3MgcHJhY3RpY2FsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTY3NSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjQ6MTcuMTczODk1ODU0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjU1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NjU1OlxcdHN0YXRpYyBpbnQgbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbjY2NTY6XFx0XFx0XFx0XFx0XFx0XFx0IGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcXG42NjU3OlxcdHtcXG42NjU4OlxcdFxcdHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcCA9IGRzLVxcdTAwM2Vwcml2O1xcbjY2NTk6XFx0XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIG9sZF9wcm90b2NvbDtcXG42NjYwOlxcdFxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xcbjY2NjE6XFx0XFx0aW50IGVycjtcXG42NjYyOlxcdFxcbjY2NjM6XFx0XFx0c3dpdGNoIChwcm90bykge1xcbjY2NjQ6XFx0XFx0Y2FzZSBEU0FfVEFHX1BST1RPX0VEU0E6XFxuNjY2NTpcXHRcXHRcXHRzd2l0Y2ggKGNoaXAtXFx1MDAzZWluZm8tXFx1MDAzZWVkc2Ffc3VwcG9ydCkge1xcbjY2NjY6XFx0XFx0XFx0Y2FzZSBNVjg4RTZYWFhfRURTQV9VTlNVUFBPUlRFRDpcXG42NjY3OlxcdFxcdFxcdFxcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xcbjY2Njg6XFx0XFx0XFx0Y2FzZSBNVjg4RTZYWFhfRURTQV9VTkRPQ1VNRU5URUQ6XFxuNjY2OTpcXHRcXHRcXHRcXHRkZXZfd2FybihjaGlwLVxcdTAwM2VkZXYsIFxcXCJSZWx5aW5nIG9uIHVuZG9jdW1lbnRlZCBFRFNBIHRhZ2dpbmcgYmVoYXZpb3JcXFxcblxcXCIpO1xcbjY2NzA6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuNjY3MTpcXHRcXHRcXHRjYXNlIE1WODhFNlhYWF9FRFNBX1NVUFBPUlRFRDpcXG42NjcyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjY2NzM6XFx0XFx0XFx0fVxcbjY2NzQ6XFx0XFx0XFx0YnJlYWs7XFxuNjY3NTpcXHRcXHRjYXNlIERTQV9UQUdfUFJPVE9fRFNBOlxcbjY2NzY6XFx0XFx0XFx0YnJlYWs7XFxuNjY3NzpcXHRcXHRkZWZhdWx0OlxcbjY2Nzg6XFx0XFx0XFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XFxuNjY3OTpcXHRcXHR9XFxuNjY4MDpcXHRcXG42NjgxOlxcdFxcdG9sZF9wcm90b2NvbCA9IGNoaXAtXFx1MDAzZXRhZ19wcm90b2NvbDtcXG42NjgyOlxcdFxcdGNoaXAtXFx1MDAzZXRhZ19wcm90b2NvbCA9IHByb3RvO1xcbjY2ODM6XFx0XFxuNjY4NDpcXHRcXHRtdjg4ZTZ4eHhfcmVnX2xvY2soY2hpcCk7XFxuNjY4NTpcXHRcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2NwdV9wb3J0KGNwdV9kcCwgZHMpIHtcXG42Njg2OlxcdFxcdFxcdGVyciA9IG12ODhlNnh4eF9zZXR1cF9wb3J0X21vZGUoY2hpcCwgY3B1X2RwLVxcdTAwM2VpbmRleCk7XFxuNjY4NzpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuNjY4ODpcXHRcXHRcXHRcXHRtdjg4ZTZ4eHhfcmVnX3VubG9jayhjaGlwKTtcXG42Njg5OlxcdFxcdFxcdFxcdGdvdG8gdW53aW5kO1xcbjY2OTA6XFx0XFx0XFx0fVxcbjY2OTE6XFx0XFx0fVxcbjY2OTI6XFx0XFx0bXY4OGU2eHh4X3JlZ191bmxvY2soY2hpcCk7XFxuNjY5MzpcXHRcXG42Njk0OlxcdFxcdHJldHVybiAwO1xcbjY2OTU6XFx0XFxuNjY5NjpcXHR1bndpbmQ6XFxuNjY5NzpcXHRcXHRjaGlwLVxcdTAwM2V0YWdfcHJvdG9jb2wgPSBvbGRfcHJvdG9jb2w7XFxuNjY5ODpcXHRcXG42Njk5OlxcdFxcdG12ODhlNnh4eF9yZWdfbG9jayhjaGlwKTtcXG42NzAwOlxcdFxcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfY3B1X3BvcnRfY29udGludWVfcmV2ZXJzZShjcHVfZHAsIGRzKVxcbjY3MDE6XFx0XFx0XFx0bXY4OGU2eHh4X3NldHVwX3BvcnRfbW9kZShjaGlwLCBjcHVfZHAtXFx1MDAzZWluZGV4KTtcXG42NzAyOlxcdFxcdG12ODhlNnh4eF9yZWdfdW5sb2NrKGNoaXApO1xcbjY3MDM6XFx0XFxuNjcwNDpcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMjoyNDoxNy4xNzQzNjQ2MzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNjQ5MjYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgUHJvdG9jb2wgU3VwcG9ydCoqXG5cbkFscmlnaHQsIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgY29kZSwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgb25seSBzZXQgdXAgdG8gaGFuZGxlIHR3byBzcGVjaWZpYyBEU0EgcHJvdG9jb2wgdGFnczogYERTQV9UQUdfUFJPVE9fRURTQWAgYW5kIGBEU0FfVEFHX1BST1RPX0RTQWAuIFRoYXQncyBhIGJpdCBsaW1pdGluZywgaXNuJ3QgaXQ/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFib3V0IG90aGVyIHJlbGV2YW50IGhhcmR3YXJlPyBTcGVjaWZpY2FsbHksIEknbSB3b25kZXJpbmcgYWJvdXQgdGhlIGBydGw4MzY1bWJgIHByb3RvY29sIC0gZG9lcyB0aGlzIGNvZGViYXNlIG5lZWQgdG8gYWNjb21tb2RhdGUgdGhhdCBvbmUgYXQgYWxsPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGxpbWl0ZWQgc3VwcG9ydCBpcyBpbnRlbnRpb25hbCwgYSBjb25zY2lvdXMgZGVzaWduIGRlY2lzaW9uLCBvciBpZiBpdCdzIGEgZ2FwIHRoYXQgbmVlZHMgdG8gYmUgYWRkcmVzc2VkLiBQZXJoYXBzIGl0IGlzIG5vdCByZWxldmFudCwgYnV0IEkgbmVlZCB0byBhc2sgbXlzZWxmIHdoZXRoZXIgdGhlIHNjb3BlIG9mIHByb3RvY29scyBpcyBwcm9wZXJseSBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njc1NywiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjQ6MjAuOTAwODYwNzgzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5MjA6XFx0c3RhdGljIGludCBydGw4MzY1bWJfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuMjkyMTpcXHRcXHRcXHRcXHRcXHRcXHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxcbjI5MjI6XFx0e1xcbjI5MjM6XFx0XFx0c3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbjI5MjQ6XFx0XFx0c3RydWN0IHJ0bDgzNjVtYl9jcHUgKmNwdTtcXG4yOTI1OlxcdFxcdHN0cnVjdCBydGw4MzY1bWIgKm1iO1xcbjI5MjY6XFx0XFxuMjkyNzpcXHRcXHRtYiA9IHByaXYtXFx1MDAzZWNoaXBfZGF0YTtcXG4yOTI4OlxcdFxcdGNwdSA9IFxcdTAwMjZtYi1cXHUwMDNlY3B1O1xcbjI5Mjk6XFx0XFxuMjkzMDpcXHRcXHRzd2l0Y2ggKHByb3RvKSB7XFxuMjkzMTpcXHRcXHRjYXNlIERTQV9UQUdfUFJPVE9fUlRMOF80OlxcbjI5MzI6XFx0XFx0XFx0Y3B1LVxcdTAwM2Vmb3JtYXQgPSBSVEw4MzY1TUJfQ1BVX0ZPUk1BVF84QllURVM7XFxuMjkzMzpcXHRcXHRcXHRjcHUtXFx1MDAzZXBvc2l0aW9uID0gUlRMODM2NU1CX0NQVV9QT1NfQUZURVJfU0E7XFxuMjkzNDpcXHRcXHRcXHRicmVhaztcXG4yOTM1OlxcdFxcdGNhc2UgRFNBX1RBR19QUk9UT19SVEw4XzRUOlxcbjI5MzY6XFx0XFx0XFx0Y3B1LVxcdTAwM2Vmb3JtYXQgPSBSVEw4MzY1TUJfQ1BVX0ZPUk1BVF84QllURVM7XFxuMjkzNzpcXHRcXHRcXHRjcHUtXFx1MDAzZXBvc2l0aW9uID0gUlRMODM2NU1CX0NQVV9QT1NfQkVGT1JFX0NSQztcXG4yOTM4OlxcdFxcdFxcdGJyZWFrO1xcbjI5Mzk6XFx0XFx0LyogVGhlIHN3aXRjaCBhbHNvIHN1cHBvcnRzIGEgNC1ieXRlIGZvcm1hdCwgc2ltaWxhciB0byBydGw0YSBidXQgd2l0aFxcbjI5NDA6XFx0XFx0ICogdGhlIHNhbWUgMHgwNCA4LWJpdCB2ZXJzaW9uIGFuZCBwcm9iYWJseSA4LWJpdCBwb3J0IHNvdXJjZS9kZXN0LlxcbjI5NDE6XFx0XFx0ICogVGhlcmUgaXMgbm8gcHVibGljIGRvYyBhYm91dCBpdC4gTm90IHN1cHBvcnRlZCB5ZXQgYW5kIGl0IHdpbGwgcHJvYmFibHlcXG4yOTQyOlxcdFxcdCAqIG5ldmVyIGJlLlxcbjI5NDM6XFx0XFx0ICovXFxuMjk0NDpcXHRcXHRkZWZhdWx0OlxcbjI5NDU6XFx0XFx0XFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XFxuMjk0NjpcXHRcXHR9XFxuMjk0NzpcXHRcXG4yOTQ4OlxcdFxcdHJldHVybiBydGw4MzY1bWJfY3B1X2NvbmZpZyhwcml2KTtcXG4yOTQ5OlxcdH1cXG4yOTUwOlxcdFxcbjI5NTE6XFx0c3RhdGljIGludCBydGw4MzY1bWJfc3dpdGNoX2luaXQoc3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdilcXG4yOTUyOlxcdHtcXG4yOTUzOlxcdFxcdHN0cnVjdCBydGw4MzY1bWIgKm1iID0gcHJpdi1cXHUwMDNlY2hpcF9kYXRhO1xcbjI5NTQ6XFx0XFx0Y29uc3Qgc3RydWN0IHJ0bDgzNjVtYl9jaGlwX2luZm8gKmNpO1xcbjI5NTU6XFx0XFx0aW50IHJldDtcXG4yOTU2OlxcdFxcdGludCBpO1xcbjI5NTc6XFx0XFxuMjk1ODpcXHRcXHRjaSA9IG1iLVxcdTAwM2VjaGlwX2luZm87XFxuMjk1OTpcXHRcXG4yOTYwOlxcdFxcdC8qIERvIGFueSBjaGlwLXNwZWNpZmljIGluaXQgamFtIGJlZm9yZSBnZXR0aW5nIHRvIHRoZSBjb21tb24gc3R1ZmYgKi9cXG4yOTYxOlxcdFxcdGlmIChjaS1cXHUwMDNlamFtX3RhYmxlKSB7XFxuMjk2MjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY2ktXFx1MDAzZWphbV9zaXplOyBpKyspIHtcXG4yOTYzOlxcdFxcdFxcdFxcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVxcdTAwM2VtYXAsIGNpLVxcdTAwM2VqYW1fdGFibGVbaV0ucmVnLFxcbjI5NjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgY2ktXFx1MDAzZWphbV90YWJsZVtpXS52YWwpO1xcbjI5NjU6XFx0XFx0XFx0XFx0aWYgKHJldClcXG4yOTY2OlxcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjk2NzpcXHRcXHRcXHR9XFxuMjk2ODpcXHRcXHR9XFxuMjk2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjQ6MjAuOTAxMDU2NzMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NjgxMTc1MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gYSBWZW5kb3ItU3BlY2lmaWMgTURJTyBTd2l0Y2ggRHJpdmVyKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgYERTQV9UQUdfUFJPVE9fWVQ5MjJYYCBwcm90b2NvbCBpcyBhIGRlYWQgZW5kIGluIHRoZSBjb250ZXh0IG9mIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uLiBJdCBvbmx5IHN1cHBvcnRzIGBEU0FfVEFHX1BST1RPX1JUTDhfNGAgYW5kIGBEU0FfVEFHX1BST1RPX1JUTDhfNFRgLCBzbyB0aGVyZSdzIG5vIHdheSB0byBkeW5hbWljYWxseSBzd2l0Y2ggZXhpc3RpbmcgRFNBIHN3aXRjaCBkcml2ZXJzIHRvIHRoaXMgbmV3IHByb3RvY29sLlxuXG5JIGNvbnNpZGVyZWQsIGNvdWxkIHdlIHNpbXBseSBsb2FkIHRoZSBgeXQ5MjF4YCBtb2R1bGU/IFRoZSBtb2R1bGUgYHRhZ195dDkyMXgua29gIHJlZ2lzdGVycyB0aGUgdGFnIGRyaXZlciwgYnV0IGl0cyBgeG1pdGAgYW5kIGByY3ZgIGZ1bmN0aW9ucyB3aWxsIG5ldmVyIGJlIGNhbGxlZC4gQmVjYXVzZSBubyBEU0Egc3dpdGNoIHVzZXMgdGhlIG5ldyBwcm90b2NvbC4gRnVydGhlcm1vcmUsIHRoZSBjb3JyZXNwb25kaW5nIGB5dDkyeHhfbWRpb19kcml2ZXJgIHdvbid0IHByb2JlIHNpbmNlIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgRGV2aWNlIFRyZWUgbm9kZS4gVGhpcyB3aG9sZSBibG9jayBvZiBjb2RlLCBJJ3ZlIGNvbmNsdWRlZCwgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgRFQgaW5qZWN0aW9uLCB3aGljaCBhcmVuJ3Qgc3RhbmRhcmQuXG5cbkkgcmFuIHRocm91Z2ggYSBmZXcgc2NlbmFyaW9zIGluIG15IG1pbmQuIENvdWxkIGEgdXNlciBjcmVhdGUgYSBkdW1teSBuZXRkZXZpY2UgYW5kIHNldCBpdHMgYGRzYV9wdHJgPyBObywgdGhlIERTQSBjb3JlIG1hbmFnZXMgdGhpcywgcmVxdWlyaW5nIGEgcmVnaXN0ZXJlZCBEU0Egc3dpdGNoLiBEVCBpbmplY3Rpb24/IFN5emthbGxlciBkb2Vzbid0IGhhdmUgYSBnZW5lcmljIG1lY2hhbmlzbSBmb3IgTURJTyBkZXZpY2VzIG9uIHg4Nl82NDsgYHN5el9kZXZsaW5rYCBpcyBkaWZmZXJlbnQgYW5kIHRoZSBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgIGNhbGwgaXMgZm9yIHBsYXRmb3JtIGRldmljZXMsIG5vdCBNRElPLlxuXG5UaGVuIEkgY29uc2lkZXJlZCBpZiB3ZSBjb3VsZCBjYWxsIGB5dDkyeHhfbWRpb19wcm9iZWAgdmlhIGEgcGxhdGZvcm0gZGV2aWNlPyBObywgaXQncyByZWdpc3RlcmVkIGFzIGFuIGBtZGlvX2RyaXZlcmAgd2hpY2ggcmVxdWlyZXMgYW4gTURJTyBidXMgdG8gcHJvYmUuIEV2ZW4gaWYgd2UgY291bGQgY29uanVyZSBhbiBNRElPIGRldmljZSwgaXQgbmVlZHMgYG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpYCB0byBub3QgYmUgTlVMTCwgd2hpY2ggaXMgdG8gc2F5LCBpdCBNVVNUIGhhdmUgYSBEVCBub2RlLiBTaW5jZSB4ODZfNjQgUUVNVSBkb2Vzbid0IHVzZSBEZXZpY2UgVHJlZSwgaXQgdXNlcyBBQ1BJLCBzbyB0aGF0IGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIE5VTEwuIFRoZXJlJ3Mgbm8gQUNQSSBtYXRjaCB0YWJsZSwgb25seSBgb2ZfbWF0Y2hfdGFibGVgLiBTbywgb24geDg2XzY0LCB0aGlzIGRyaXZlciB3b24ndCBwcm9iZS5cblxuSSByZW1lbWJlcmVkIHN5emthbGxlciBhbHNvIHJ1bnMgb24gQVJNNjQuIERvZXMgaXQgaW5qZWN0IERUIG5vZGVzIHRoZXJlPyBObywgaXQgdXNlcyBhIHN0YXRpYyBEVEIsIHNvIG5vIGR5bmFtaWMgYWRkaXRpb24uIFRoaXMgZnVydGhlciBzb2xpZGlmaWVzIHRoZSBkcml2ZXIncyB1bnJlYWNoYWJpbGl0eS5cblxuTGV0IG1lIHJldmlldyB0aGUgZ3VpZGVsaW5lcy4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4gLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIC4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIlxuXG5UaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIE1ESU8gc3dpdGNoIGRyaXZlciBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUvWVQ5MjI0LCByZXF1aXJpbmcgZWl0aGVyIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGEgc3BlY2lmaWMgRFQgbm9kZSB0aGF0IGlzbid0IHByZXNlbnQgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBJdCdzIHVucmVhY2hhYmxlLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIG90aGVyIGNoYW5nZXMuIFRoZXJlIGFyZSBLY29uZmlnIGNoYW5nZXMsIE1ha2VmaWxlIGNoYW5nZXMsIHRoZSBNRElPIGRyaXZlciAoYHl0OTIxeC5jYCksIGEgaGVhZGVyLCBhZGRzIGBEU0FfVEFHX1BST1RPX1lUOTIyWF9WQUxVRWAgaW4gYGRzYS5oYCBhbmQgdGhlIHRhZyBkcml2ZXIgKGB0YWdfeXQ5MjF4LmNgKS4gRXZlcnl0aGluZyBwb2ludHMgdG8gdGhpcyBNb3RvcmNvbW0gc3dpdGNoIGRyaXZlciBhbmQgaXRzIHRhZyBkcml2ZXIuXG5cblNpbmNlIHRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgYW5kIHRoZSBkcml2ZXIgd29uJ3QgcHJvYmUgd2l0aG91dCBhIHNwZWNpZmljIERUIG5vZGUsIGl0J3MgYWxsIHVucmVhY2hhYmxlLlxuXG5JJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc4MjAsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjI0OjM2LjU4MjIzNTE4NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMjQgZXRoZXJuZXQgc3dpdGNoIGNoaXAgdG8gdGhlIHl0OTIxeCBEU0EgZHJpdmVyIGFuZCBhIGNvcnJlc3BvbmRpbmcgRFNBIHRhZyBkcml2ZXIuIFRoZSBkcml2ZXIgaXMgYW4gTURJTyBkcml2ZXIgdGhhdCByZWxpZXMgb24gRGV2aWNlIFRyZWUgKE9GIG1hdGNoIGRhdGEpIHRvIHByb2JlLCB3aGljaCBpcyBub3QgYXZhaWxhYmxlIG9yIGR5bmFtaWNhbGx5IGluamVjdGFibGUgaW4gc3RhbmRhcmQgeDg2XzY0IFFFTVUvR0NFIGVudmlyb25tZW50cy4gRnVydGhlcm1vcmUsIHRoZSBEU0EgdGFnIGRyaXZlciBjYW5ub3QgYmUgcmVhY2hlZCBiZWNhdXNlIG5vIGVtdWxhdGVkIERTQSBzd2l0Y2ggKGxpa2UgZHNhX2xvb3ApIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSB0aGUgbmV3bHkgYWRkZWQgRFNBX1RBR19QUk9UT19ZVDkyMlggcHJvdG9jb2wuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIyNCBldGhlcm5ldCBzd2l0Y2ggY2hpcCB0byB0aGUgeXQ5MjF4IERTQSBkcml2ZXIgYW5kIGEgY29ycmVzcG9uZGluZyBEU0EgdGFnIGRyaXZlci4gVGhlIGRyaXZlciBpcyBhbiBNRElPIGRyaXZlciB0aGF0IHJlbGllcyBvbiBEZXZpY2UgVHJlZSAoT0YgbWF0Y2ggZGF0YSkgdG8gcHJvYmUsIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgb3IgZHluYW1pY2FsbHkgaW5qZWN0YWJsZSBpbiBzdGFuZGFyZCB4ODZfNjQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBGdXJ0aGVybW9yZSwgdGhlIERTQSB0YWcgZHJpdmVyIGNhbm5vdCBiZSByZWFjaGVkIGJlY2F1c2Ugbm8gZW11bGF0ZWQgRFNBIHN3aXRjaCAobGlrZSBkc2FfbG9vcCkgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBuZXdseSBhZGRlZCBEU0FfVEFHX1BST1RPX1lUOTIyWCBwcm90b2NvbC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMjoyNDozNi41ODIyNzQxNzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowc4k72[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-14 02:04:35 +0000 UTC FinishedAt: 2026-08-14 02:24:37 +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+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIyNCBldGhlcm5ldCBzd2l0Y2ggY2hpcCB0byB0aGUgeXQ5MjF4IERTQSBkcml2ZXIgYW5kIGEgY29ycmVzcG9uZGluZyBEU0EgdGFnIGRyaXZlci4gVGhlIGRyaXZlciBpcyBhbiBNRElPIGRyaXZlciB0aGF0IHJlbGllcyBvbiBEZXZpY2UgVHJlZSAoT0YgbWF0Y2ggZGF0YSkgdG8gcHJvYmUsIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgb3IgZHluYW1pY2FsbHkgaW5qZWN0YWJsZSBpbiBzdGFuZGFyZCB4ODZfNjQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBGdXJ0aGVybW9yZSwgdGhlIERTQSB0YWcgZHJpdmVyIGNhbm5vdCBiZSByZWFjaGVkIGJlY2F1c2Ugbm8gZW11bGF0ZWQgRFNBIHN3aXRjaCAobGlrZSBkc2FfbG9vcCkgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBuZXdseSBhZGRlZCBEU0FfVEFHX1BST1RPX1lUOTIyWCBwcm90b2NvbC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjIxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmI5MzFlOTAyZjE4MWVhMTgyNTBiNTlhYzk0NzM4MjVkZDFmMmIxOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDE0IDAyOjIxOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmMuLjY5YzgyNGZkOTViZjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbkBAIC0xNTksMTEgJiM0MzsxNTksMTEgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXG4gXHQgIGFuZCBWU0M3Mzk4IFNwYXJYIGludGVncmF0ZWQgZXRoZXJuZXQgc3dpdGNoZXMsIGNvbm5lY3RlZCBvdmVyXG4gXHQgIGEgQ1BVLWF0dGFjaGVkIGFkZHJlc3MgYnVzIGFuZCB3b3JrIGluIG1lbW9yeS1tYXBwZWQgSS9PIG1vZGUuXG4gXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXG4tXHR0cmlzdGF0ZSBcJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbiYjNDM7Y29uZmlnIE5FVF9EU0FfWVQ5MlhYXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFlUOTIxNSBhbmQgWVQ5MjI0IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcJiMzNDtcbiYjNDM7XHRzZWxlY3QgTkVUX0RTQV9UQUdfWVQ5MlhYXG4gXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxuIFx0aGVscFxuLVx0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgZXRoZXJuZXQgc3dpdGNoXG4mIzQzO1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgYW5kIFlUOTIyNCBldGhlcm5ldCBzd2l0Y2hcbiBcdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBkMjk3NWJhZGZmYzA5Li4xOGMyY2VlZjA5YTUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNCw3ICYjNDM7MTQsNyBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTykgJiM0Mzs9IGxhbjkzMDNfbWRpby5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1wbGF0Zm9ybS5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1NQSSkgJiM0Mzs9IHZpdGVzc2UtdnNjNzN4eC1zcGkub1xuLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vXG4mIzQzO29iai0kKENPTkZJR19ORVRfRFNBX1lUOTJYWCkgJiM0Mzs9IHl0OTIxeC5vXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBiNTMvXG4gb2JqLXlcdFx0XHRcdCYjNDM7PSBoaXJzY2htYW5uL1xuIG9iai15XHRcdFx0XHQmIzQzOz0gbGFudGlxL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYyBiL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuaW5kZXggMTU5YjE2NjA2ZjZjYS4uNzQyNTU1Zjg3ODE5ZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXG5AQCAtMTQ4LDEwICYjNDM7MTQ4LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXHRcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDgpLFxuIFx0XHRZVDkyMVhfUE9SVF9NQVNLX0VYVDAgfCBZVDkyMVhfUE9SVF9NQVNLX0VYVDEsXG4gXHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdFwmIzM0O1lUOTIyNFwmIzM0OywgWVQ5MjI0X01BSk9SLCAwLCAwLFxuJiM0MztcdFx0MHgxZjEsXG4mIzQzO1x0XHQweDAsXG4mIzQzO1x0fSxcbiBcdHt9XG4gfTtcbiBcbi0jZGVmaW5lIFlUOTIxWF9OQU1FXHRcJiMzNDt5dDkyMXhcJiMzNDtcbiYjNDM7I2RlZmluZSBZVDkyWFhfTkFNRVx0XCYjMzQ7eXQ5Mnh4XCYjMzQ7XG4gXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuQEAgLTU2MCwxMCAmIzQzOzU2NSwxMiBAQCB5dDkyMXhfaW50aWZfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IHZhbClcbiBzdGF0aWMgaW50IHl0OTIxeF9tYnVzX2ludF9yZWFkKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZylcbiB7XG4gXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtYnVzLVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IG1heF9wb3J0cztcbiBcdHUxNiB2YWw7XG4gXHRpbnQgcmVzO1xuIFxuLVx0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMVhfUE9SVF9OVU0pXG4mIzQzO1x0bWF4X3BvcnRzID0gcHJpdi1cdTAwM2VjaGlwX2luZm8tXHUwMDNlcG9ydHM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNlPSBtYXhfcG9ydHMpXG4gXHRcdHJldHVybiBVMTZfTUFYO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbkBAIC01NzksOSAmIzQzOzU4NiwxMSBAQCBzdGF0aWMgaW50XG4geXQ5MjF4X21idXNfaW50X3dyaXRlKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IGRhdGEpXG4ge1xuIFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cdTAwM2Vwcml2O1xuJiM0MztcdGludCBtYXhfcG9ydHM7XG4gXHRpbnQgcmVzO1xuIFxuLVx0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMVhfUE9SVF9OVU0pXG4mIzQzO1x0bWF4X3BvcnRzID0gcHJpdi1cdTAwM2VjaGlwX2luZm8tXHUwMDNlcG9ydHM7XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNlPSBtYXhfcG9ydHMpXG4gXHRcdHJldHVybiAtRU5PREVWO1xuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbkBAIC01OTYsMTkgJiM0Mzs2MDUsMjEgQEAgeXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqbWJ1cztcbiYjNDM7XHRpbnQgbWF4X3BvcnRzO1xuIFx0aW50IHJlcztcbiBcbiBcdG1idXMgPSBkZXZtX21kaW9idXNfYWxsb2MoZGV2KTtcbiBcdGlmICghbWJ1cylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4mIzQzO1x0bWF4X3BvcnRzID0gcHJpdi1cdTAwM2VjaGlwX2luZm8tXHUwMDNlcG9ydHM7XG4gXHRtYnVzLVx1MDAzZW5hbWUgPSBcJiMzNDtZVDkyMXggaW50ZXJuYWwgTURJTyBidXNcJiMzNDs7XG4gXHRzbnByaW50ZihtYnVzLVx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFwmIzM0OyVzXCYjMzQ7LCBkZXZfbmFtZShkZXYpKTtcbiBcdG1idXMtXHUwMDNlcHJpdiA9IHByaXY7XG4gXHRtYnVzLVx1MDAzZXJlYWQgPSB5dDkyMXhfbWJ1c19pbnRfcmVhZDtcbiBcdG1idXMtXHUwMDNld3JpdGUgPSB5dDkyMXhfbWJ1c19pbnRfd3JpdGU7XG4gXHRtYnVzLVx1MDAzZXBhcmVudCA9IGRldjtcbi1cdG1idXMtXHUwMDNlcGh5X21hc2sgPSAodTMyKX5HRU5NQVNLKFlUOTIxWF9QT1JUX05VTSAtIDEsIDApO1xuJiM0MztcdG1idXMtXHUwMDNlcGh5X21hc2sgPSAodTMyKX5HRU5NQVNLKG1heF9wb3J0cyAtIDEsIDApO1xuIFxuIFx0cmVzID0gZGV2bV9vZl9tZGlvYnVzX3JlZ2lzdGVyKGRldiwgbWJ1cywgbW5wKTtcbiBcdGlmIChyZXMpXG5AQCAtNDc0OCw2ICYjNDM7NDc1OSwxMyBAQCBzdGF0aWMgaW50IHl0OTIxeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbiBcdGludCByZXM7XG4gXG4mIzQzO1x0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRwcC1cdTAwM2VpbmRleCA9IGk7XG4mIzQzO1x0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiBcdHJlcyA9IHl0OTIxeF9jaGlwX3Jlc2V0KHByaXYpO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuQEAgLTQ4NjksMTE0ICYjNDM7NDg4Nyw5MzUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XG4gXHQuc2V0dXBcdFx0XHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXG4gfTtcbiBcbi1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3N0YXRpYyBpbnQgeXQ5MjJ4X3BvcnRfZG93bihzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuIHtcbi1cdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XG4mIzQzO1x0dTMyIG1hc2s7XG4mIzQzO1x0aW50IHJlcztcbiBcbi1cdGlmICghcHJpdilcbi1cdFx0cmV0dXJuO1xuJiM0MztcdC8qIG1hYyBmb3JjZSBkb3duICovXG4mIzQzO1x0bWFzayA9IFlUOTIyWF9QT1JUX0xJTksgfCBZVDkyMlhfUE9SVF9SWF9NQUNfRU4gfFxuJiM0MztcdCAgICAgICBZVDkyMlhfUE9SVF9UWF9NQUNfRU4gfCBZVDkyMlhfUE9SVF9MSU5LX0FOO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfY2xlYXJfYml0cyhwcml2LCBZVDkyMlhfUE9SVG5fQ1RSTChwb3J0KSwgbWFzayk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0LyogTmVlZCBmb3JjZSBvcCB0byBtYWtlIHNvZnQgY29uZmlndXJhdGlvbiBlZmZlY3RpdmUgKi9cbiYjNDM7XHRtYXNrID0gWVQ5MjJYX1BPUlRfRk9SQ0VfT1A7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfUE9SVG5fQ1RSTChwb3J0KSwgbWFzayk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4gXG4tXHRkc2Ffc3dpdGNoX3NodXRkb3duKFx1MDAyNnByaXYtXHUwMDNlZHMpO1xuJiM0MztcdC8qIGRpc2FibGUgZW5fcGh5ICovXG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfVkFMVUUsIEJJVChwb3J0KSk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfRU5fUEhZX09WRVJXUklURSwgQklUKHBvcnQpKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3N0YXRpYyB2b2lkXG4mIzQzO3l0OTIyeF9waHlsaW5rX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuJiM0MztcdFx0XHQgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4ge1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRwLVx1MDAzZWRzKTtcbiYjNDM7XHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuJiM0MztcdGludCByZXM7XG4gXG4tXHRpZiAoIXByaXYpXG4tXHRcdHJldHVybjtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIyeF9wb3J0X2Rvd24ocHJpdiwgcG9ydCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuIFxuLVx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGktLSBcdTAwM2UgMDsgKSB7XG4tXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRkZXZfZXJyKGRwLVx1MDAzZWRzLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvICVzIHBvcnQgJWQ6ICVpXFxuXCYjMzQ7LCBcJiMzNDticmluZyBkb3duXCYjMzQ7LFxuJiM0MztcdFx0XHRwb3J0LCByZXMpO1xuJiM0Mzt9XG4gXG4tXHRcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHAtXHUwMDNlbWliX3JlYWQpO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIyeF9wb3J0X3VwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHVuc2lnbmVkIGludCBtb2RlLFxuJiM0MztcdCAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQsIGludCBkdXBsZXgsXG4mIzQzO1x0ICAgICAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbWFzaztcbiYjNDM7XHR1MzIgY3RybDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHNwZWVkKSB7XG4mIzQzO1x0Y2FzZSBTUEVFRF8xMDpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgU1BFRURfMTAwOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9QT1JUX1NQRUVEXzEwMDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgU1BFRURfMTAwMDpcbiYjNDM7XHRcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBTUEVFRF8yNTAwOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9QT1JUX1NQRUVEXzI1MDA7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFNQRUVEXzEwMDAwOlxuJiM0MztcdFx0Y3RybCA9IFlUOTIxWF9QT1JUX1NQRUVEXzEwMDAwO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuJiM0MztcdGlmIChkdXBsZXggPT0gRFVQTEVYX0ZVTEwpXG4mIzQzO1x0XHRjdHJsIHw9IFlUOTIyWF9QT1JUX0RVUExFWF9GVUxMO1xuJiM0MztcdGlmICh0eF9wYXVzZSlcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjJYX1BPUlRfVFhfUEFVU0U7XG4mIzQzO1x0aWYgKHJ4X3BhdXNlKVxuJiM0MztcdFx0Y3RybCB8PSBZVDkyMlhfUE9SVF9SWF9QQVVTRTtcbiYjNDM7XHRjdHJsIHw9IFlUOTIyWF9QT1JUX1JYX01BQ19FTiB8IFlUOTIyWF9QT1JUX1RYX01BQ19FTiB8XG4mIzQzO1x0XHRZVDkyMlhfUE9SVF9DRkdfVFhfRU4gfCBZVDkyMlhfUE9SVF9MSU5LIHxcbiYjNDM7XHRcdFlUOTIyWF9QT1JUX0NGR19SWF9FTjtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfihZVDkyMlhfUE9SVF9GQ19BTiB8IFlUOTIyWF9QT1JUX0xJTktfQU4pO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1BPUlRuX0NUUkwocG9ydCksIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdC8qIGZvcmNlIG9wICovXG4mIzQzO1x0bWFzayA9IFlUOTIyWF9QT1JUX0ZPUkNFX09QO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCksIG1hc2spO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuIFxuLVx0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKFx1MDAyNnByaXYtXHUwMDNlZHMpO1xuJiM0MztcdC8qIGVuYWJsZSBlbl9waHkgKi9cbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfVkFMVUUsIEJJVChwb3J0KSk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfRU5fUEhZX09WRVJXUklURSwgQklUKHBvcnQpKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiBcbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXHUwMDNlYWNsX2Jsa3MpOyBpJiM0MzsmIzQzOykge1xuLVx0XHRzdHJ1Y3QgeXQ5MjF4X2FjbF9ibGsgKmFjbGJsayA9IHByaXYtXHUwMDNlYWNsX2Jsa3NbaV07XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiBcbi1cdFx0aWYgKCFhY2xibGspXG4tXHRcdFx0Y29udGludWU7XG4tXHRcdGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIFx1MDAzYyBBUlJBWV9TSVpFKGFjbGJsay1cdTAwM2VydWxlcyk7IGomIzQzOyYjNDM7KSB7XG4tXHRcdFx0c3RydWN0IHl0OTIxeF9hY2xfcnVsZSAqYWNscnVsZSA9IGFjbGJsay1cdTAwM2VydWxlc1tqXTtcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7eXQ5MjJ4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4mIzQzO1x0XHRcdCAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHVuc2lnbmVkIGludCBtb2RlLFxuJiM0MztcdFx0XHQgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQsIGludCBkdXBsZXgsXG4mIzQzO1x0XHRcdCAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpO1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRwLVx1MDAzZWRzKTtcbiYjNDM7XHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuJiM0MztcdGludCByZXM7XG4gXG4tXHRcdFx0aWYgKCFhY2xydWxlKVxuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0a3ZmcmVlKGFjbHJ1bGUpO1xuLVx0XHR9XG4tXHRcdGt2ZnJlZShhY2xibGspO1xuLVx0fVxuLVx0bXV0ZXhfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIyeF9wb3J0X3VwKHByaXYsIHBvcnQsIG1vZGUsIGludGVyZmFjZSwgc3BlZWQsIGR1cGxleCxcbiYjNDM7XHRcdFx0ICAgICB0eF9wYXVzZSwgcnhfcGF1c2UpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdGRldl9lcnIoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcXG5cJiMzNDssIFwmIzM0O2JyaW5nIHVwXCYjMzQ7LFxuJiM0MztcdFx0XHRwb3J0LCByZXMpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHl0OTIxeF9tZGlvX3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbiYjNDM7c3RhdGljIGludFxuJiM0Mzt5dDkyMnhfaW50aWZfZXh0X3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2ICp2YWxwKVxuIHtcbi1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuLVx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcbi1cdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdjtcbi1cdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcbiYjNDM7XHRpbnQgcmVzO1xuIFxuLVx0cHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpO1xuLVx0aWYgKCFwcml2KVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRpZiAocG9ydCBcdTAwM2U9IFlUOTIyWF9QT1JUX05VTSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xuLVx0aWYgKCFtZGlvKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfd3JpdGUocHJpdiwgcG9ydCwgWVQ5MlhYX1BBR0VfU0VMRUNULCByZWcpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuIFxuLVx0bWRpby1cdTAwM2VidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbi1cdG1kaW8tXHUwMDNlYWRkciA9IG1kaW9kZXYtXHUwMDNlYWRkcjtcbi1cdG1kaW8tXHUwMDNlc3dpdGNoaWQgPSAwO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9yZWFkKHByaXYsIHBvcnQsIFlUOTJYWF9QQUdFLCB2YWxwKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiBcbi1cdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiBcbi1cdHByaXYtXHUwMDNlcmVnX29wcyA9IFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XG4tXHRwcml2LVx1MDAzZXJlZ19jdHggPSBtZGlvO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIxeF9pbnRpZl9leHRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdGludCByZXM7XG4gXG4tXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG4mIzQzO1x0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMVhfUE9SVF9OVU0pXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbi1cdFx0cHAtXHUwMDNlaW5kZXggPSBpO1xuLVx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcbi1cdH1cbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfd3JpdGUocHJpdiwgcG9ydCwgWVQ5MlhYX1BBR0VfU0VMRUNULCByZWcpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuIFxuLVx0ZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuLVx0ZHMtXHUwMDNlZGV2ID0gZGV2O1xuLVx0ZHMtXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xuLVx0ZHMtXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcbi1cdGRzLVx1MDAzZXByaXYgPSBwcml2O1xuLVx0ZHMtXHUwMDNlb3BzID0gXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzO1xuLVx0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDA7XG4tXHRkcy1cdTAwM2VhZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMDtcbi1cdGRzLVx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFx1MDAyNnl0OTIxeF9waHlsaW5rX21hY19vcHM7XG4tXHRkcy1cdTAwM2VudW1fbGFnX2lkcyA9IFlUOTIxWF9MQUdfTlVNO1xuLVx0ZHMtXHUwMDNlbnVtX3BvcnRzID0gWVQ5MjFYX1BPUlRfTlVNO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBwb3J0LCBZVDkyWFhfUEFHRSwgdmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiBcbi1cdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiBcbi1cdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTtcbiYjNDM7c3RhdGljIGludCB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQoaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0ICAgICAgIGVudW0geXQ5MjJ4X3BoeV9yZWdfdHlwZSByZWdfdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICAgZW51bSB5dDkyMnhfcGh5X3JlZ19zcGFjZSByZWdfc3BhY2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydCBcdTAwM2U9IDQgXHUwMDI2XHUwMDI2IHBvcnQgXHUwMDNjPSA3KSB7XG4mIzQzO1x0XHRzd2l0Y2ggKHJlZ190eXBlKSB7XG4mIzQzO1x0XHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfQ09NTU9OX0VYVDpcbiYjNDM7XHRcdFx0cmVzID0gOTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfUEhZX0NPTU1PTl9FWFQ6XG4mIzQzO1x0XHRcdGlmIChwb3J0IFx1MDAzYz0gNSBcdTAwMjZcdTAwMjYgcG9ydCBcdTAwM2U9IDQpXG4mIzQzO1x0XHRcdFx0cmVzID0gNDtcbiYjNDM7XHRcdFx0ZWxzZSBpZiAocG9ydCBcdTAwM2M9IDcgXHUwMDI2XHUwMDI2IHBvcnQgXHUwMDNlPSA2KVxuJiM0MztcdFx0XHRcdHJlcyA9IDY7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhUOlxuJiM0MztcdFx0XHRyZXMgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGlmIChyZWdfc3BhY2UgIT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfUEhZKVxuJiM0MztcdFx0XHRcdHJlcyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRpZiAocG9ydCA9PSA4KSB7XG4mIzQzO1x0XHRcdHN3aXRjaCAocmVnX3R5cGUpIHtcbiYjNDM7XHRcdFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQ6XG4mIzQzO1x0XHRcdFx0cmVzID0gOTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhUOlxuJiM0MztcdFx0XHRcdHJlcyA9IDg7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9NSUk6XG4mIzQzO1x0XHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9FWFQ6XG4mIzQzO1x0XHRcdFx0aWYgKHJlZ19zcGFjZSA9PSBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSB8fFxuJiM0MztcdFx0XHRcdCAgICByZWdfc3BhY2UgPT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfVVNYR01JSSlcbiYjNDM7XHRcdFx0XHRcdHJlcyA9IDg7XG4mIzQzO1x0XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdFx0cmVzID0gLUVJTlZBTDtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0XHRyZXMgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRzd2l0Y2ggKHJlZ190eXBlKSB7XG4mIzQzO1x0XHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfQ09NTU9OX0VYVDpcbiYjNDM7XHRcdFx0cmVzID0gOTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQ6XG4mIzQzO1x0XHRcdHJlcyA9IDA7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX01JSTpcbiYjNDM7XHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9FWFQ6XG4mIzQzO1x0XHRcdGlmIChyZWdfc3BhY2UgPT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkgfHxcbiYjNDM7XHRcdFx0ICAgIHJlZ19zcGFjZSA9PSBZVDkyMlhfUEhZX1JFR19TUEFDRV9VU1hHTUlJKVxuJiM0MztcdFx0XHRcdHJlcyA9IDA7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRyZXMgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdHJlcyA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJlcztcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5MjF4X29mX21hdGNoW10gPSB7XG4tXHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0OTIxNVwmIzM0OyB9LFxuJiM0MztzdGF0aWMgaW50IHl0OTIyeF9wb3J0X3Nkc19pbml0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsXG4mIzQzO1x0XHRcdFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiYjNDM7e1xuJiM0MztcdGludCBhZGRyO1xuJiM0MztcdHUxNiBkYXRhO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQocG9ydCxcbiYjNDM7XHRcdFx0XHRcdCAgIFlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQsXG4mIzQzO1x0XHRcdFx0XHQgICBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSk7XG4mIzQzO1x0aWYgKGFkZHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHQvKiB3cml0ZSBwcm90ZWN0ICovXG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRiZSwgMHhkKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHQvKiBDRFIgKi9cbiYjNDM7XHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDBCQVNFWCkge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQwNiwgMHgwKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDE2LCAweDM0NTgpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQwNiwgMHg4MDApO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MTYsIDB4NDU1OCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XHQvKiBQTEwgKi9cbiYjNDM7XHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJKSB7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDNhLCAweDEwMDYpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2YsIDB4MzAyOSk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQyYSwgMHhmMDcwKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2QsIDB4MjA3ZCk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzYywgMHgyMDdkKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDNmLCAweDMwMzIpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2EsIDB4Nik7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQyYSwgMHhmMDcwKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcdC8qIFZDTyAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MzksIDB4QzApO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdC8qIFZkYWMgKi9cbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDkyLCAweDdmN2YpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTEsIDB4N2YpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdC8qIEV5ZSAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0NTQsIDB4ZjE0KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDk3LCAweGE0NCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRjZCwgMHgwKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRhZiwgMHg0NWUzKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDhhLCAweGZmZik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQwOCwgMHg3YzAwKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NGQ2LCAweDdmKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDRmLCAweGZmMDgpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdC8qIEZGRSAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OGUsIDB4N2QwMCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweGQsIDB4NjBmKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHQvKiBDVExFICovXG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRiMCwgMHg4MDQpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0YjEsIDB4Nzc3NCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRhZiwgMHg0NWU3KTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4MywgMHg1NjAzKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0bXNsZWVwKDIwKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDkyLCAweDdmZmYpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTIsIDB4N2Y3Zik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0LyogQ1RMRSAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHgyMDAwLCAweDQwKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4MjAwMCwgMHgwKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUkpIHtcbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHgxMDQyLCAweDQ4Yyk7XG4mIzQzO1x0XHRpZiAocmVzKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzOyAgICAvKiBzb2Z0IHJlc2V0ICovXG4mIzQzO1x0YWRkciA9IHl0OTIyeF9pbnRlcm5hbF9waHlhZGRyX2dldChwb3J0LCBZVDkyMlhfUEhZX1JFR19UWVBFX01JSSxcbiYjNDM7XHRcdFx0XHRcdCAgIFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJKTtcbiYjNDM7XHRpZiAoYWRkciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX3JlYWQocHJpdiwgYWRkciwgMHgyMDAwLCBcdTAwMjZkYXRhKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRkYXRhIFx1MDAyNj0gfigxIFx1MDAzY1x1MDAzYyAxNSk7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIGFkZHIsIDB4MjAwMCwgZGF0YSk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0YWRkciA9IHl0OTIyeF9pbnRlcm5hbF9waHlhZGRyX2dldChwb3J0LCBZVDkyMlhfUEhZX1JFR19UWVBFX01JSSxcbiYjNDM7XHRcdFx0XHRcdCAgIFlUOTIyWF9QSFlfUkVHX1NQQUNFX1VTWEdNSUkpO1xuJiM0MztcdGlmIChhZGRyIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfaW50aWZfcmVhZChwcml2LCBhZGRyLCAweDAsIFx1MDAyNmRhdGEpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdGRhdGEgfD0gMSBcdTAwM2NcdTAwM2MgMTU7XG4mIzQzO1x0cmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIGFkZHIsIDB4MCwgZGF0YSk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50XG4mIzQzO3l0OTIyeF9wb3J0X2NvbmZpZyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgbW9kZSxcbiYjNDM7XHRcdCAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgYWRkcjtcbiYjNDM7XHR1MTYgZGF0YTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRhZGRyID0geXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0KHBvcnQsXG4mIzQzO1x0XHRcdFx0XHQgICBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhULFxuJiM0MztcdFx0XHRcdFx0ICAgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkpO1xuJiM0MztcdGlmIChhZGRyIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0c3dpdGNoIChpbnRlcmZhY2UpIHtcbiYjNDM7XHQvKiBTRVJERVMgKi9cbiYjNDM7XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcbiYjNDM7XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDBCQVNFWDpcbiYjNDM7XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XG4mIzQzO1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYOlxuJiM0MztcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XG4mIzQzO1x0XHRyZXMgPSB5dDkyMnhfcG9ydF9zZHNfaW5pdChwcml2LCBwb3J0LCBpbnRlcmZhY2UpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0XHRhZGRyID0geXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0XG4mIzQzO1x0XHRcdChwb3J0LCBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhULFxuJiM0MztcdFx0XHQgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkpO1xuJiM0MztcdFx0aWYgKGFkZHIgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRcdHJlcyA9IHl0OTIyeF9pbnRpZl9leHRfcmVhZChwcml2LCBhZGRyLCBZVDkyMlhfUE9SVF9TRFNfTU9ERSxcbiYjNDM7XHRcdFx0XHRcdCAgICBcdTAwMjZkYXRhKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdFx0ZGF0YSBcdTAwMjY9ICh+MHg3IFx1MDAzY1x1MDAzYyA0KTtcbiYjNDM7XHRcdHN3aXRjaCAoaW50ZXJmYWNlKSB7XG4mIzQzO1x0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcbiYjNDM7XHRcdFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXG4mIzQzO1x0XHRcdFx0XHQgICBZVDkyWFhfU0VSREVTX01PREVfU0dNSUkpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMEJBU0VYOlxuJiM0MztcdFx0XHRkYXRhIHw9IEZJRUxEX1BSRVAoWVQ5MjJYX1BPUlRfU0RTX01PREVfTSxcbiYjNDM7XHRcdFx0XHRcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV8xMDBCQVNFWCk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYOlxuJiM0MztcdFx0XHRkYXRhIHw9IEZJRUxEX1BSRVAoWVQ5MjJYX1BPUlRfU0RTX01PREVfTSxcbiYjNDM7XHRcdFx0XHRcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV8xMDAwQkFTRVgpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDpcbiYjNDM7XHRcdFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXG4mIzQzO1x0XHRcdFx0XHQgICBZVDkyWFhfU0VSREVTX01PREVfMjUwMEJBU0VYKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9VU1hHTUlJOlxuJiM0MztcdFx0XHRkYXRhIHw9IEZJRUxEX1BSRVAoWVQ5MjJYX1BPUlRfU0RTX01PREVfTSxcbiYjNDM7XHRcdFx0XHRcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV9VU1hHTUlJKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgWVQ5MjJYX1BPUlRfU0RTX01PREUsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGRhdGEpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZFxuJiM0Mzt5dDkyMnhfcGh5bGlua19tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcbiYjNDM7XHRcdFx0ICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHAtXHUwMDNlZHMpO1xuJiM0MztcdGludCBwb3J0ID0gZHAtXHUwMDNlaW5kZXg7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRyZXMgPSB5dDkyMnhfcG9ydF9jb25maWcocHJpdiwgcG9ydCwgbW9kZSwgc3RhdGUtXHUwMDNlaW50ZXJmYWNlKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRkZXZfZXJyKGRwLVx1MDAzZWRzLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvICVzIHBvcnQgJWQ6ICVpXFxuXCYjMzQ7LCBcJiMzNDtjb25maWdcJiMzNDssXG4mIzQzO1x0XHRcdHBvcnQsIHJlcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHl0OTIyeF9waHlsaW5rX21hY19vcHMgPSB7XG4mIzQzO1x0Lm1hY19saW5rX2Rvd25cdD0geXQ5MjJ4X3BoeWxpbmtfbWFjX2xpbmtfZG93bixcbiYjNDM7XHQubWFjX2xpbmtfdXBcdD0geXQ5MjJ4X3BoeWxpbmtfbWFjX2xpbmtfdXAsXG4mIzQzO1x0Lm1hY19jb25maWdcdD0geXQ5MjJ4X3BoeWxpbmtfbWFjX2NvbmZpZyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcbiYjNDM7eXQ5MjJ4X2RzYV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBEU0FfVEFHX1BST1RPX1lUOTIyWDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWRcbiYjNDM7eXQ5MjJ4X2RzYV9waHlsaW5rX2dldF9jYXBzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm8gPSBwcml2LVx1MDAzZWluZm87XG4mIzQzO1xuJiM0MztcdGNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzID0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFIHxcbiYjNDM7XHRcdFx0XHQgICBNQUNfMTAgfCBNQUNfMTAwIHwgTUFDXzEwMDA7XG4mIzQzO1xuJiM0MztcdGlmIChpbmZvLVx1MDAzZWludGVybmFsX21hc2sgXHUwMDI2IEJJVChwb3J0KSkge1xuJiM0MztcdFx0aWYgKHBvcnQgXHUwMDNlPSA0IFx1MDAyNlx1MDAyNiBwb3J0IFx1MDAzYz0gNykge1xuJiM0MztcdFx0XHQvKiBwb3J0IDQgdG8gcG9ydCA3LCBpbnRlcm5hbCB1dHAgKi9cbiYjNDM7XHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCxcbiYjNDM7XHRcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1x0XHRcdGNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18yNTAwRkQ7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLFxuJiM0MztcdFx0XHRcdCAgY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDBCQVNFWCxcbiYjNDM7XHRcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1x0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLFxuJiM0MztcdFx0XHRcdCAgY29uZmlnLVx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgsXG4mIzQzO1x0XHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0XHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMEZEO1xuJiM0MztcdFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUksXG4mIzQzO1x0XHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0XHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMEZEO1xuJiM0MztcdFx0XHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfNTAwMEZEO1xuJiM0MztcdFx0XHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMDBGRDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0LyogZXh0ZXJuYWwgcG9ydCB3aWxsIGFkZGVkIGxhdGVyICovXG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0OTIyeF9wb3J0X3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcdTAwMjZwcml2LVx1MDAzZWRzO1xuJiM0MztcdHUzMiBtYXNrO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdC8qIGVuYWJsZSB1c2VyIHBvcnQgaXNvbGF0aW9uIGFuZCBkaXNhYmxlIGZkYiBsZWFybmluZyAqL1xuJiM0MztcdGN0cmwgPSB+cHJpdi1cdTAwM2VjcHVfcG9ydHNfbWFzaztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9QT1JUbl9JU09MQVRJT04ocG9ydCksIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRtYXNrID0gWVQ5MjJYX1BPUlRfTEVBUk5fRElTO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjJYX1BPUlRuX0xFQVJOKHBvcnQpLCBtYXNrKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpIHtcbiYjNDM7XHRcdGN0cmwgPSB+KHUzMikwO1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfUE9SVG5fSVNPTEFUSU9OKHBvcnQpLFxuJiM0MztcdFx0XHRcdCAgICAgICBjdHJsKTtcbiYjNDM7XHRcdGlmIChyZXMpXG4mIzQzO1x0XHRcdHJldHVybiByZXM7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0OTIyeF9kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4mIzQzO1x0cmVzID0geXQ5MjJ4X3BvcnRfc2V0dXAocHJpdiwgcG9ydCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0OTIyeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvICppbmZvO1xuJiM0MztcdHUzMiBjaGlwaWQ7XG4mIzQzO1x0dTMyIG1ham9yO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ0hJUF9JRCwgXHUwMDI2Y2hpcGlkKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRtYWpvciA9IEZJRUxEX0dFVChZVDkyMVhfQ0hJUF9JRF9NQUpPUiwgY2hpcGlkKTtcbiYjNDM7XHRmb3IgKGluZm8gPSB5dDkyMXhfaW5mb3M7IGluZm8tXHUwMDNlbmFtZTsgaW5mbyYjNDM7JiM0MzspXG4mIzQzO1x0XHRpZiAoaW5mby1cdTAwM2VtYWpvciA9PSBtYWpvcilcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0aWYgKCFpbmZvLVx1MDAzZW5hbWUpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtVbmV4cGVjdGVkIGNoaXBpZCAweCV4XFxuXCYjMzQ7LCBjaGlwaWQpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcdHByaXYtXHUwMDNlaW5mbyA9IGluZm87XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0OTIyeF9jaGlwX3Jlc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHUzMiB2YWw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjJ4X2NoaXBfZGV0ZWN0KHByaXYpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHQvKiBSZXNldCAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX1JTVCwgWVQ5MjFYX1JTVF9IVyk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdGZzbGVlcChZVDkyMVhfUlNUX0RFTEFZX1VTKTtcbiYjNDM7XG4mIzQzO1x0dmFsID0gMDtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dhaXQocHJpdiwgWVQ5MjFYX1JTVCwgfjAsIFx1MDAyNnZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0OTIyeF9jaGlwX3NldHVwX2RzYShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNwdV9wb3J0c19tYXNrO1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdGludCBwb3J0O1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdGN0cmwgPSBHRU5NQVNLKDksIDApO1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0ZJTFRFUl9VTktfVUNBU1QsIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRjdHJsID0gMDtcbiYjNDM7XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgcHJpdi1cdTAwM2VjaGlwX2luZm8tXHUwMDNlcG9ydHM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0Y3RybCB8PSBZVDkyMlhfQUNUX1VOS19BQ1RuX1RSQVAoaSk7XG4mIzQzO1x0Y3B1X3BvcnRzX21hc2sgPSBwcml2LVx1MDAzZWNwdV9wb3J0c19tYXNrO1xuJiM0MztcdGZvcl9lYWNoX3NldF9iaXQocG9ydCwgXHUwMDI2Y3B1X3BvcnRzX21hc2ssIHByaXYtXHUwMDNlY2hpcF9pbmZvLVx1MDAzZXBvcnRzKSB7XG4mIzQzO1x0XHRjdHJsIFx1MDAyNj0gfllUOTIyWF9BQ1RfVU5LX0FDVG5fTShwb3J0KTtcbiYjNDM7XHRcdGN0cmwgfD0gWVQ5MjJYX0FDVF9VTktfQUNUbl9EUk9QKHBvcnQpO1xuJiM0MztcdH1cbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9BQ1RfVU5LX1VDQVNULCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9BQ1RfVU5LX01DQVNULCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IFlUOTIyWF9GVU5DX01JQiB8IFlUOTIyWF9GVU5DX0FDTDtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIxWF9GVU5DLCBjdHJsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0cmVzID0geXQ5MjJ4X2NoaXBfc2V0dXBfZHNhKHByaXYpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dDkyMnhfY3B1X3RhZ19tb2RlX3NldChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4mIzQzO1x0dTE2IGV0aF9wX3RhZztcbiYjNDM7XHR1MzIgdmFsO1xuJiM0MztcdHUzMiB2YWwxO1xuJiM0MztcdGludCByZXM7XG4mIzQzO1xuJiM0MztcdC8qIGNwdSB0YWcgbW9kZSBzZXQgKi9cbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjJYX0NQVV9UQUdfUlhfQ1RSTCwgXHUwMDI2dmFsKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjJYX0NQVV9UQUdfVFhfQ1RSTCwgXHUwMDI2dmFsMSk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0dmFsIFx1MDAyNj0gfllUOTIyWF9DUFVfVEFHX1JYX01PREU7XG4mIzQzO1x0dmFsMSBcdTAwMjY9IH5ZVDkyMlhfQ1BVX1RBR19UWF9NT0RFO1xuJiM0MztcdHZhbDEgXHUwMDI2PSB+WVQ5MjJYX0NQVV9UQUdfVFhfVFlQRTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9DUFVfVEFHX1JYX0NUUkwsIHZhbCk7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQ1BVX1RBR19UWF9DVFJMLCB2YWwxKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0LyogdHBpZCBjaGVjayAqL1xuJiM0MztcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ1BVX1RBR19UUElELCBcdTAwMjZ2YWwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcdGV0aF9wX3RhZyA9IEZJRUxEX0dFVChZVDkyMVhfQ1BVX1RBR19UUElEX1RQSURfTSwgdmFsKTtcbiYjNDM7XHRpZiAoZXRoX3BfdGFnICE9IEVUSF9QX1lUOTIxWCkge1xuJiM0MztcdFx0ZGV2X2VycihkZXYsIFwmIzM0O1RhZyB0eXBlIDB4JXggIT0gMHgleFxcblwmIzM0OywgZXRoX3BfdGFnLFxuJiM0MztcdFx0XHRFVEhfUF9ZVDkyMVgpO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dDkyMnhfY3B1X3BvcnRfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0aW50IHJlcztcbiYjNDM7XG4mIzQzO1x0LyogY3B1IHRhZyBtb2RlICovXG4mIzQzO1x0cmVzID0geXQ5MjJ4X2NwdV90YWdfbW9kZV9zZXQocHJpdik7XG4mIzQzO1x0aWYgKHJlcylcbiYjNDM7XHRcdHJldHVybiByZXM7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBEU0EgKi9cbiYjNDM7XHRwcml2LVx1MDAzZWNwdV9wb3J0c19tYXNrID0gZHNhX2NwdV9wb3J0cyhkcyk7XG4mIzQzO1x0Y3RybCA9IFlUOTIxWF9FWFRfQ1BVX1BPUlRfVEFHX0VOIHwgWVQ5MjFYX0VYVF9DUFVfUE9SVF9QT1JUX0VOIHxcbiYjNDM7XHQgICAgICAgWVQ5MjFYX0VYVF9DUFVfUE9SVF9QT1JUKF9fZmZzKHByaXYtXHUwMDNlY3B1X3BvcnRzX21hc2spKTtcbiYjNDM7XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9FWFRfQ1BVX1BPUlQsIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHQvKiBTZXR1cCBzb2Z0d2FyZSBzd2l0Y2ggKi9cbiYjNDM7XHRjdHJsID0gWVQ5MjJYX0NQVV9DT1BZX1RPX0VYVF9DUFU7XG4mIzQzO1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQ1BVX0NPUFksIGN0cmwpO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmVzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0OTIyeF9kc2Ffc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZW9mX25vZGU7XG4mIzQzO1x0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIyeF9jaGlwX3Jlc2V0KHByaXYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0LyogUmVnaXN0ZXIgdGhlIGludGVybmFsIG1kaW8gYnVzLiAqL1xuJiM0MztcdGNoaWxkID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobnAsIFwmIzM0O21kaW9cJiMzNDspO1xuJiM0MztcdGlmIChjaGlsZCkge1xuJiM0MztcdFx0cmVzID0geXQ5MjF4X21idXNfaW50X2luaXQocHJpdiwgY2hpbGQpO1xuJiM0MztcdFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xuJiM0MztcdFx0aWYgKHJlcylcbiYjNDM7XHRcdFx0cmV0dXJuIHJlcztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCAvKiBjcHUgcG9ydCBzZXQgKi9cbiYjNDM7XHQgbXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHQgcmVzID0geXQ5MjJ4X2NwdV9wb3J0X3NldChwcml2KTtcbiYjNDM7XHQgbXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdGlmIChyZXMpXG4mIzQzO1x0XHRyZXR1cm4gcmVzO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuJiM0MztcdHJlcyA9IHl0OTIyeF9jaGlwX3NldHVwKHByaXYpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XHRpZiAocmVzKVxuJiM0MztcdFx0cmV0dXJuIHJlcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgeXQ5MjJ4X2RzYV9zd2l0Y2hfb3BzID0ge1xuJiM0MztcdC8qIHBvcnQgKi9cbiYjNDM7XHQuZ2V0X3RhZ19wcm90b2NvbFx0PSB5dDkyMnhfZHNhX2dldF90YWdfcHJvdG9jb2wsXG4mIzQzO1x0LnBoeWxpbmtfZ2V0X2NhcHNcdD0geXQ5MjJ4X2RzYV9waHlsaW5rX2dldF9jYXBzLFxuJiM0MztcdC5wb3J0X3NldHVwXHRcdD0geXQ5MjJ4X2RzYV9wb3J0X3NldHVwLFxuJiM0MztcdC8qIGNoaXAgKi9cbiYjNDM7XHQuc2V0dXBcdFx0XHQ9IHl0OTIyeF9kc2Ffc2V0dXAsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTJ4eF9jaGlwX2luZm8geXQ5Mnh4X2NoaXBfaW5mb190YWJsZVtdID0ge1xuJiM0MztcdFtZVDkyMTVdID0ge1xuJiM0MztcdFx0Lm1vZGUgPSBZVDkyMTUsXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O21vdG9yY29tbSB5dDkyMTVcJiMzNDssXG4mIzQzO1x0XHQucG9ydHMgPSBZVDkyMVhfUE9SVF9OVU0sXG4mIzQzO1x0XHQubGFnX2lkID0gWVQ5MjFYX0xBR19OVU0sXG4mIzQzO1x0XHQuYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDAsXG4mIzQzO1x0XHQuYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDUwMDAsXG4mIzQzO1x0XHQuc3dpdGNoX29wcyA9IFx1MDAyNnl0OTIxeF9kc2Ffc3dpdGNoX29wcyxcbiYjNDM7XHRcdC5tYWNfb3BzID0gXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcyxcbiYjNDM7XHR9LFxuJiM0MztcdFtZVDkyMjRdID0ge1xuJiM0MztcdFx0Lm1vZGUgPSBZVDkyMjQsXG4mIzQzO1x0XHQubmFtZSA9IFwmIzM0O21vdG9yY29tbSB5dDkyMjRcJiMzNDssXG4mIzQzO1x0XHQucG9ydHMgPSBZVDkyMlhfUE9SVF9OVU0sXG4mIzQzO1x0XHQubGFnX2lkID0gWVQ5MjJYX0xBR19OVU0sXG4mIzQzO1x0XHQuYWdlaW5nX3RpbWVfbWluID0gMSAqIDYwMDAsXG4mIzQzO1x0XHQuYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDYwMDAsXG4mIzQzO1x0XHQuc3dpdGNoX29wcyA9IFx1MDAyNnl0OTIyeF9kc2Ffc3dpdGNoX29wcyxcbiYjNDM7XHRcdC5tYWNfb3BzID0gXHUwMDI2eXQ5MjJ4X3BoeWxpbmtfbWFjX29wcyxcbiYjNDM7XHR9LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgeXQ5Mnh4X21kaW9fc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRkc2Ffc3dpdGNoX3NodXRkb3duKFx1MDAyNnByaXYtXHUwMDNlZHMpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCB5dDkyeHhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbiYjNDM7XHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuJiM0MztcbiYjNDM7XHRcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHAtXHUwMDNlbWliX3JlYWQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKFx1MDAyNnByaXYtXHUwMDNlZHMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZWFjbF9ibGtzKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCB5dDkyMXhfYWNsX2JsayAqYWNsYmxrID0gcHJpdi1cdTAwM2VhY2xfYmxrc1tpXTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIWFjbGJsaylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHRmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShhY2xibGstXHUwMDNlcnVsZXMpOyBqJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRzdHJ1Y3QgeXQ5MjF4X2FjbF9ydWxlICphY2xydWxlID0gYWNsYmxrLVx1MDAzZXJ1bGVzW2pdO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKCFhY2xydWxlKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0XHRrdmZyZWUoYWNscnVsZSk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRrdmZyZWUoYWNsYmxrKTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfZGVzdHJveShcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dDkyeHhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgeXQ5Mnh4X2NoaXBfaW5mbyAqY29tcGF0X2luZm8gPSBOVUxMO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuJiM0MztcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XG4mIzQzO1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2O1xuJiM0MztcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcbiYjNDM7XG4mIzQzO1x0Y29tcGF0X2luZm8gPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTtcbiYjNDM7XHRpZiAoIWNvbXBhdF9pbmZvKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIXByaXYpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4mIzQzO1x0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmICghbWRpbylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRtZGlvLVx1MDAzZWJ1cyA9IG1kaW9kZXYtXHUwMDNlYnVzO1xuJiM0MztcdG1kaW8tXHUwMDNlYWRkciA9IG1kaW9kZXYtXHUwMDNlYWRkcjtcbiYjNDM7XHRtZGlvLVx1MDAzZXN3aXRjaGlkID0gMDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2VjaGlwX2luZm8gPSBjb21wYXRfaW5mbztcbiYjNDM7XHRwcml2LVx1MDAzZXJlZ19vcHMgPSBcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xuJiM0MztcdHByaXYtXHUwMDNlcmVnX2N0eCA9IG1kaW87XG4mIzQzO1xuJiM0MztcdGRzID0gXHUwMDI2cHJpdi1cdTAwM2VkcztcbiYjNDM7XHRkcy1cdTAwM2VkZXYgPSBkZXY7XG4mIzQzO1x0ZHMtXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xuJiM0MztcdGRzLVx1MDAzZWRzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7XG4mIzQzO1x0ZHMtXHUwMDNlcHJpdiA9IHByaXY7XG4mIzQzO1x0ZHMtXHUwMDNlb3BzID0gY29tcGF0X2luZm8tXHUwMDNlc3dpdGNoX29wcztcbiYjNDM7XHRkcy1cdTAwM2VhZ2VpbmdfdGltZV9taW4gPSBjb21wYXRfaW5mby1cdTAwM2VhZ2VpbmdfdGltZV9taW47XG4mIzQzO1x0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gY29tcGF0X2luZm8tXHUwMDNlYWdlaW5nX3RpbWVfbWF4O1xuJiM0MztcdGRzLVx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IGNvbXBhdF9pbmZvLVx1MDAzZW1hY19vcHM7XG4mIzQzO1x0ZHMtXHUwMDNlbnVtX2xhZ19pZHMgPSBjb21wYXRfaW5mby1cdTAwM2VsYWdfaWQ7XG4mIzQzO1x0ZHMtXHUwMDNlbnVtX3BvcnRzID0gY29tcGF0X2luZm8tXHUwMDNlcG9ydHM7XG4mIzQzO1xuJiM0MztcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5Mnh4X29mX21hdGNoW10gPSB7XG4mIzQzO1x0e1xuJiM0MztcdFx0LmNvbXBhdGlibGUgPSBcJiMzNDttb3RvcmNvbW0seXQ5MjE1XCYjMzQ7LFxuJiM0MztcdFx0LmRhdGEgPSBcdTAwMjZ5dDkyeHhfY2hpcF9pbmZvX3RhYmxlW1lUOTIxNV0sXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHQuY29tcGF0aWJsZSA9IFwmIzM0O21vdG9yY29tbSx5dDkyMjRcJiMzNDssXG4mIzQzO1x0XHQuZGF0YSA9IFx1MDAyNnl0OTJ4eF9jaGlwX2luZm9fdGFibGVbWVQ5MjI0XSxcbiYjNDM7XHR9LFxuIFx0e31cbiB9O1xuLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTIxeF9vZl9tYXRjaCk7XG4mIzQzO01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTJ4eF9vZl9tYXRjaCk7XG4gXG4tc3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7XG4tXHQucHJvYmUgPSB5dDkyMXhfbWRpb19wcm9iZSxcbi1cdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXG4tXHQuc2h1dGRvd24gPSB5dDkyMXhfbWRpb19zaHV0ZG93bixcbiYjNDM7c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyeHhfbWRpb19kcml2ZXIgPSB7XG4mIzQzO1x0LnByb2JlID0geXQ5Mnh4X21kaW9fcHJvYmUsXG4mIzQzO1x0LnJlbW92ZSA9IHl0OTJ4eF9tZGlvX3JlbW92ZSxcbiYjNDM7XHQuc2h1dGRvd24gPSB5dDkyeHhfbWRpb19zaHV0ZG93bixcbiBcdC5tZGlvZHJ2LmRyaXZlciA9IHtcbi1cdFx0Lm5hbWUgPSBZVDkyMVhfTkFNRSxcbi1cdFx0Lm9mX21hdGNoX3RhYmxlID0geXQ5MjF4X29mX21hdGNoLFxuJiM0MztcdFx0Lm5hbWUgPSBZVDkyWFhfTkFNRSxcbiYjNDM7XHRcdC5vZl9tYXRjaF90YWJsZSA9IHl0OTJ4eF9vZl9tYXRjaCxcbiBcdH0sXG4gfTtcbiBcbi1tZGlvX21vZHVsZV9kcml2ZXIoeXQ5MjF4X21kaW9fZHJpdmVyKTtcbiYjNDM7bWRpb19tb2R1bGVfZHJpdmVyKHl0OTJ4eF9tZGlvX2RyaXZlcik7XG4gXG4gTU9EVUxFX0FVVEhPUihcJiMzNDtEYXZpZCBZYW5nIFx1MDAzY21teWFuZ2ZsQGdtYWlsLmNvbVx1MDAzZVwmIzM0Oyk7XG4tTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0RyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBTd2l0Y2hcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0t5bGUgU3dpdGNoIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O0RyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBhbmQgWVQ5MjJ4IFN3aXRjaFwmIzM0Oyk7XG4gTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbmluZGV4IDVmM2I5OWUxODljNDEuLjAzMDhlNmI5MTYxOGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxuQEAgLTgzNyw2ICYjNDM7ODM3LDcgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gXG4gI2RlZmluZSBZVDkyMTVfTUFKT1JcdDB4OTAwMlxuICNkZWZpbmUgWVQ5MjE4X01BSk9SXHQweDkwMDFcbiYjNDM7I2RlZmluZSBZVDkyMjRfTUFKT1JcdDB4OTAwNFxuIFxuIC8qIHJlcXVpcmVkIGZvciBhIGhhcmQgcmVzZXQgKi9cbiAjZGVmaW5lIFlUOTIxWF9SU1RfREVMQVlfVVNcdDEwMDAwXG5AQCAtODUzLDYgJiM0Mzs4NTQsOTYgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gLyogOCBpbnRlcm5hbCAmIzQzOyAyIGV4dGVybmFsICYjNDM7IDEgbWN1ICovXG4gI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cdFx0XHQxMVxuIFxuJiM0MzsvKiB5dDkyMnggcmVnaXN0ZXIgbGlzdHMgKi9cbiYjNDM7I2RlZmluZSBZVDkyWFhfUEFHRV9TRUxFQ1RcdDB4MWVcbiYjNDM7I2RlZmluZSBZVDkyWFhfUEFHRVx0XHQweDFmXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCkgICAgICAgICAgICAgICAgKDB4ODAwODAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9DVFJMX1BBVVNFX0FOICAgICAgQklUKDEwKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUbl9TVEFUVVMocG9ydCkgICAgICAoMHg4MDIwMCAmIzQzOyA0ICogKHBvcnQpKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9FTl9QSFlfT1ZFUldSSVRFICAgKDB4ODAwNDApXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0VOX1BIWV9WQUxVRSAgICAgICAoMHg4MDAzYylcbiYjNDM7LyogQ1RSTDogZm9yY2Ugb3AgdG8gbWFrZSBzb2Z0IGNvbmZpZ3VyYXRpb24gZWZmZWN0aXZlICovXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfRk9SQ0VfT1AgICAgICAgICAgIEJJVCgxNClcbiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9DRkdfVFhfRU4gICAgICAgQklUKDEzKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX0NGR19SWF9FTiAgICAgICBCSVQoMTIpXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfRkNfQU4gICAgICAgICAgICBCSVQoMTEpXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfTElOS19BTiAgICAgICAgICAgIEJJVCgxMCkgIC8qIENUUkw6IGF1dG8gbmVnb3RpYXRpb24gKi9cbiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9MSU5LICAgICAgICAgICAgICAgQklUKDkpICAvKiBDVFJMOiBsaW5rIHN0YXR1cyAqL1xuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX0hBTEZfUEFVU0UgICAgICAgICBCSVQoOCkgIC8qIEhhbGYtZHVwbGV4IGJhY2sgcHJlc3N1cmUgbW9kZSAqL1xuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX0RVUExFWF9GVUxMICAgICAgICAgICAgICAgIEJJVCg3KVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX1JYX1BBVVNFICAgICAgICAgICBCSVQoNilcbiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9UWF9QQVVTRSAgICAgICAgICAgQklUKDUpXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfUlhfTUFDX0VOICAgICAgICAgIEJJVCg0KVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX1RYX01BQ19FTiAgICAgICAgICBCSVQoMylcbiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9TUEVFRF9NICAgICAgICAgICAgR0VOTUFTSygyLCAwKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX1NEU19NT0RFICAgICAgICAgICAweDQwMFxuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX1NEU19NT0RFX00gICAgICAgICBHRU5NQVNLKDYsIDQpXG4mIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFX1NHTUlJICAgICAgICAgICAgICAgICAgICAgICAwXG4mIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFX1JFVlNHTUlJICAgICAgICAgICAgICAgICAgICAxXG4mIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFXzEwMDBCQVNFWCAgICAgICAgICAgICAgICAgICAyXG4mIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFXzEwMEJBU0VYICAgICAgICAgICAgICAgICAgICAzXG4mIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFXzI1MDBCQVNFWCAgICAgICAgICAgICAgICAgICA0XG4mIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFX1VTWEdNSUkgICAgICAgICAgICAgICAgICAgICA2XG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDlcbiYjNDM7LyogTEFHICovXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0xBR19OVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0XG4mIzQzOy8qIElTTyAqL1xuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUbl9JU09MQVRJT04ocG9ydCkgICAgICAgICAgICgweDQgKiAocG9ydCkgJiM0MzsgMHgxODBkODApXG4mIzQzOy8qIEZEQiAqL1xuJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUbl9MRUFSTihwb3J0KSAgICAgICAoMHgxODAzMDAgJiM0MzsgNCAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9MRUFSTl9ESVMgICAgICAgICAgQklUKDE4KVxuJiM0MzsvKiBHTE9CQUwgQ1RSTCAqL1xuJiM0MzsjZGVmaW5lICBZVDkyMlhfRlVOQ19BQ0wgICAgICAgICAgICAgICBCSVQoNSlcbiYjNDM7I2RlZmluZSAgWVQ5MjJYX0ZVTkNfTUlCICAgICAgICAgICAgICAgQklUKDQpXG4mIzQzOy8qIENUUkwgUEtUICovXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0ZJTFRFUl9VTktfVUNBU1QgICAgICAgICAgICAgICAgICAgICAgICAweDE4MGVjOFxuJiM0MzsjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX1VDQVNUICAgICAgICAgICAgICAgICAgIDB4MTgwZWQ4XG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfTUNBU1QgICAgICAgICAgICAgICAgICAgMHgxODBlZTBcbiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19NQ0FTVF9CWVBBU1NfRFJPUF9QSU0gICBCSVQoMjIpXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfTUNBU1RfQllQQVNTX0RST1BfTUxEICAgQklUKDIxKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX01DQVNUX0JZUEFTU19EUk9QX0lHTVAgIEJJVCgyMClcbiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX00ocG9ydCkgICAgICAgICAgICBHRU5NQVNLKDIgKiAocG9ydCkgJiM0MzsgMSwgMiAqIChwb3J0KSlcbiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuKHBvcnQsIHgpICAgICAgICAgICAoKHgpIFx1MDAzY1x1MDAzYyAoMiAqIChwb3J0KSkpXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfQUNUbl9GT1JXQVJEKHBvcnQpICAgICAgWVQ5MjJYX0FDVF9VTktfQUNUbihwb3J0LCAwKSAgLyogZmxvb2QgKi9cbiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX1RSQVAocG9ydCkgICAgICAgICBZVDkyMlhfQUNUX1VOS19BQ1RuKHBvcnQsIDMpICAvKiBzdGVlciB0byBDUFUgKi9cbiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX0RST1AocG9ydCkgICAgICAgICBZVDkyMlhfQUNUX1VOS19BQ1RuKHBvcnQsIDEpICAvKiBkaXNjYXJkICovXG4mIzQzOy8qIE5FVkVSIHVzZSB0aGlzIGFjdGlvbjsgc2VlIGNvbW1lbnRzIGluIHRoZSB0YWcgZHJpdmVyICovXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfQUNUbl9DT1BZKHBvcnQpICAgICAgICAgWVQ5MjJYX0FDVF9VTktfQUNUbihwb3J0LCAyKSAgLyogZmxvb2QgYW5kIGNvcHkgKi9cbiYjNDM7XG4mIzQzOy8qIENQVSBQT1JUICovXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9DT1BZXHRcdFx0MHgxODExMDBcbiYjNDM7I2RlZmluZSBZVDkyMlhfQ1BVX0NPUFlfVE9fSU5UX0NQVVx0QklUKDEpXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9DT1BZX1RPX0VYVF9DUFVcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1JYX0NUUkxcdFx0MHg4MDUwNFxuJiM0MzsjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1JYX01PREVcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfQ1RSTFx0XHQweDEwMDcxMFxuJiM0MzsjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1RYX1RZUEVcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfTU9ERVx0XHRCSVQoMSlcbiYjNDM7I2RlZmluZSBZVDkyMlhfQ1BVX1RBR19UWF9DVEFHX09QXHRCSVQoMilcbiYjNDM7I2RlZmluZSBZVDkyMlhfQ1BVX1RBR19UWF9TVEFHX09QXHRCSVQoMylcbiYjNDM7XG4mIzQzO2VudW0geXQ5MjJ4X3BoeV9yZWdfdHlwZSB7XG4mIzQzO1x0WVQ5MjJYX1BIWV9SRUdfVFlQRV9DT01NT05fRVhULFxuJiM0MztcdFlUOTIyWF9QSFlfUkVHX1RZUEVfUEhZX0NPTU1PTl9FWFQsXG4mIzQzO1x0WVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVCxcbiYjNDM7XHRZVDkyMlhfUEhZX1JFR19UWVBFX01JSSxcbiYjNDM7XHRZVDkyMlhfUEhZX1JFR19UWVBFX0VYVCxcbiYjNDM7XHRZVDkyMlhfUEhZX1JFR19UWVBFX01NRDEsXG4mIzQzO1x0WVQ5MjJYX1BIWV9SRUdfVFlQRV9NTUQzLFxuJiM0MztcdFlUOTIyWF9QSFlfUkVHX1RZUEVfTU1ENyxcbiYjNDM7XHRZVDkyMlhfUEhZX1JFR19UWVBFX01BWFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7ZW51bSB5dDkyMnhfcGh5X3JlZ19zcGFjZSB7XG4mIzQzO1x0WVQ5MjJYX1BIWV9SRUdfU1BBQ0VfUEhZLFxuJiM0MztcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1BIWV9UMSxcbiYjNDM7XHRZVDkyMlhfUEhZX1JFR19TUEFDRV9QSFlfTERTLFxuJiM0MztcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJLFxuJiM0MztcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1VTWEdNSUksXG4mIzQzO1x0WVQ5MjJYX1BIWV9SRUdfU1BBQ0VfUVNHTUlJLFxuJiM0MztcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX01BWFxuJiM0Mzt9O1xuJiM0MztcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2ludGVybmFsKHBvcnQpICgocG9ydCkgXHUwMDNjIDgpXG4gI2RlZmluZSB5dDkyMXhfcG9ydF9pc19leHRlcm5hbChwb3J0KSAoKHBvcnQpID09IDggfHwgKHBvcnQpID09IDkpXG4gXG5AQCAtOTQ1LDkgJiM0MzsxMDM2LDI2IEBAIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7XG4gXHRpbnQgKCp3cml0ZSkodm9pZCAqY29udGV4dCwgdTMyIHJlZywgdTMyIHZhbCk7XG4gfTtcbiBcbiYjNDM7ZW51bSB5dDkyeHhfbW9kZSB7XG4mIzQzO1x0WVQ5MjE1LFxuJiM0MztcdFlUOTIyNCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCB5dDkyeHhfY2hpcF9pbmZvIHtcbiYjNDM7XHRlbnVtIHl0OTJ4eF9tb2RlIG1vZGU7XG4mIzQzO1x0Y29uc3QgY2hhciAqbmFtZTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcG9ydHM7XG4mIzQzO1x0dW5zaWduZWQgaW50IGxhZ19pZDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYWdlaW5nX3RpbWVfbWluO1xuJiM0MztcdHVuc2lnbmVkIGludCBhZ2VpbmdfdGltZV9tYXg7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzICpzd2l0Y2hfb3BzO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgKm1hY19vcHM7XG4mIzQzO307XG4mIzQzO1xuIHN0cnVjdCB5dDkyMXhfcHJpdiB7XG4gXHRzdHJ1Y3QgZHNhX3N3aXRjaCBkcztcbiBcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgeXQ5Mnh4X2NoaXBfaW5mbyAqY2hpcF9pbmZvO1xuIFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvICppbmZvO1xuIFx0dW5zaWduZWQgaW50IG1ldGVyX3Nsb3RfbnM7XG4gXHR1bnNpZ25lZCBpbnQgcG9ydF9zaGFwZV9zbG90X25zO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmhcbmluZGV4IDZmN2Y1YzE3YjUzMjAuLjBjMDMzY2E2NWI5MjMgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9uZXQvZHNhLmhcbkBAIC02MCw2ICYjNDM7NjAsNyBAQCBzdHJ1Y3QgdGNfYWN0aW9uO1xuICNkZWZpbmUgRFNBX1RBR19QUk9UT19NWEw4NjJfVkFMVUVcdFx0MzJcbiAjZGVmaW5lIERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRVx0XHQzM1xuICNkZWZpbmUgRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFXHRcdDM0XG4mIzQzOyNkZWZpbmUgRFNBX1RBR19QUk9UT19ZVDkyMlhfVkFMVUUgICAgICAgICAgICAgIDM1XG4gXG4gZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcbiBcdERTQV9UQUdfUFJPVE9fTk9ORVx0XHQ9IERTQV9UQUdfUFJPVE9fTk9ORV9WQUxVRSxcbkBAIC05Nyw2ICYjNDM7OTgsNyBAQCBlbnVtIGRzYV90YWdfcHJvdG9jb2wge1xuIFx0RFNBX1RBR19QUk9UT19NWEw4NjJcdFx0PSBEU0FfVEFHX1BST1RPX01YTDg2Ml9WQUxVRSxcbiBcdERTQV9UQUdfUFJPVE9fTkVUQ1x0XHQ9IERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRSxcbiBcdERTQV9UQUdfUFJPVE9fS1NaODQ2M1x0XHQ9IERTQV9UQUdfUFJPVE9fS1NaODQ2M19WQUxVRSxcbiYjNDM7XHREU0FfVEFHX1BST1RPX1lUOTIyWFx0XHQ9IERTQV9UQUdfUFJPVE9fWVQ5MjJYX1ZBTFVFLFxuIH07XG4gXG4gc3RydWN0IGRzYV9zd2l0Y2g7XG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS9LY29uZmlnIGIvbmV0L2RzYS9LY29uZmlnXG5pbmRleCBkNWU3MjViOTBkNzg1Li5lNGZkM2E5YTY2MjExIDEwMDY0NFxuLS0tIGEvbmV0L2RzYS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL0tjb25maWdcbkBAIC0yMTUsMTAgJiM0MzsyMTUsMTAgQEAgY29uZmlnIE5FVF9EU0FfVEFHX1hSUzcwMFhcbiBcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yXG4gXHQgIEFycm93IFNwZWVkQ2hpcHMgWFJTNzAweCBzd2l0Y2hlcyB0aGF0IHVzZSBhIHNpbmdsZSBieXRlIHRhZyB0cmFpbGVyLlxuIFxuLWNvbmZpZyBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE1vdG9yY29tbSBZVDkyMXggc3dpdGNoZXNcJiMzNDtcbiYjNDM7Y29uZmlnIE5FVF9EU0FfVEFHX1lUOTJYWFxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1RhZyBkcml2ZXIgZm9yIE1vdG9yY29tbSBZVDkyMXggYW5kIFlUOTIyeCBzd2l0Y2hlc1wmIzM0O1xuIFx0aGVscFxuIFx0ICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0YWdnaW5nIGZyYW1lcyBmb3Jcbi1cdCAgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlcy5cbiYjNDM7XHQgIE1vdG9yY29tbSBZVDkyMXggYW5kIFlUOTIyeCBzd2l0Y2hlcy5cbiBcbiBlbmRpZlxuZGlmZiAtLWdpdCBhL25ldC9kc2EvTWFrZWZpbGUgYi9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBiOGMyNjY3Y2QxNGFhLi4yZDcyYTI1ZmQ5ODQ2IDEwMDY0NFxuLS0tIGEvbmV0L2RzYS9NYWtlZmlsZVxuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RzYS9NYWtlZmlsZVxuQEAgLTQyLDcgJiM0Mzs0Miw3IEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19TSkExMTA1KSAmIzQzOz0gdGFnX3NqYTExMDUub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19UUkFJTEVSKSAmIzQzOz0gdGFnX3RyYWlsZXIub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRKSAmIzQzOz0gdGFnX3ZzYzczeHhfODAyMXEub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19YUlM3MDBYKSAmIzQzOz0gdGFnX3hyczcwMHgub1xuLW9iai0kKENPTkZJR19ORVRfRFNBX1RBR19ZVDkyMVgpICYjNDM7PSB0YWdfeXQ5MjF4Lm9cbiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1lUOTJYWCkgJiM0Mzs9IHRhZ195dDkyMXgub1xuIFxuICMgZm9yIHRyYWNpbmcgZnJhbWV3b3JrIHRvIGZpbmQgdHJhY2UuaFxuIENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfeXQ5MjF4LmMgYi9uZXQvZHNhL3RhZ195dDkyMXguY1xuaW5kZXggMjk0Nzg0YWI2Njk0Yi4uYTMwMTJlYzM5ODY4NiAxMDA2NDRcbi0tLSBhL25ldC9kc2EvdGFnX3l0OTIxeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL3RhZ195dDkyMXguY1xuQEAgLTEsOCAmIzQzOzEsMTAgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuIC8qXG4gICogTW90b3Jjb21tIFlUOTIxeCBTd2l0Y2ggRXh0ZW5kZWQgQ1BVIFBvcnQgVGFnZ2luZ1xuJiM0MzsgKiBNb3RvcmNvbW0gWVQ5MjJ4IFN3aXRjaCBFeHRlbmRlZCBDUFUgUG9ydCBUYWdnaW5nXG4gICpcbiAgKiBDb3B5cmlnaHQgKGMpIDIwMjUgRGF2aWQgWWFuZyBcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cdTAwM2VcbiYjNDM7ICogQ29weXJpZ2h0IChjKSAyMDI2IEt5bGUgc3dpdGNoIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICpcbiAgKiAmIzQzOy0tLS0mIzQzOy0tLS0mIzQzOy0tLS0tLS0mIzQzOy0tLS0tJiM0MzstLS0tJiM0MzstLS0tLS0tLS1cbiAgKiB8IERBIHwgU0EgfCBUYWdFVCB8IFRhZyB8IEVUIHwgUGF5bG9hZCAuLi5cbkBAIC0xNjYsOCAmIzQzOzE2OCwxMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyB5dDkyMXhfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZWVkZWRfaGVhZHJvb20gPSBZVDkyMVhfVEFHX0xFTixcbiB9O1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcJiMzNDtEU0EgdGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlc1wmIzM0Oyk7XG4tTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjNDM7RFNBX1RBR19EUklWRVIoeXQ5MjF4X25ldGRldl9vcHMpO1xuIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX1lUOTIxWCwgWVQ5MjFYX1RBR19OQU1FKTtcbiBcbi1tb2R1bGVfZHNhX3RhZ19kcml2ZXIoeXQ5MjF4X25ldGRldl9vcHMpO1xuJiM0MzsvKiBUbyBkZWZpbmUgdGhlIGZyb20gY3B1IHRhZyBmb3JtYXQgOCBieXRlczpcbiYjNDM7ICpcbiYjNDM7ICogMCAxIDIgMyA0IDUgNiA3IHwwIDEgMiAzIDQgNSA2IDdcbiYjNDM7ICp8XHUwMDNjLS0tLS0tLS0tLS0tVFBJRCAweDk5ODgtLS0tLS0tXHUwMDNlfFxuJiM0MzsgKnxcdTAwM2MtLVJFU0VSVkUtLVx1MDAzZXxcdTAwM2MtLS0tLURTVCBQT1ItLS0tXHUwMDNlfFxuJiM0MzsgKnwtfFx1MDAzYy0tLS0tLS0tLVJFU0VSVkUtLS0tLS0tLS0tLS1cdTAwM2V8XG4mIzQzOyAqfFx1MDAzYy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVx1MDAzZXxcbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1RBR19OQU1FXHRcdFx0XCYjMzQ7eXQ5MjJ4XCYjMzQ7XG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1RBR19QT1JUTUFTS18wXHRcdEJJVCgxNSlcbiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX1BPUlRNQVNLX01cdFx0R0VOTUFTSyg4LCAwKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9UQUdfUE9SVFMoeClcdFx0RklFTERfUFJFUChZVDkyMlhfVEFHX1BPUlRNQVNLX00sICh4KSlcbiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX0ZPUkNFX0RTVFx0XHRCSVQoOSlcbiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX1BSSU9fTVx0XHRHRU5NQVNLKDEyLCAxMClcbiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX1BSSU9fRU5cdFx0QklUKDEzKVxuJiM0MzsjZGVmaW5lIFlUOTIyWF9UQUdfUFJJTyh4KVx0XHQoRklFTERfUFJFUChZVDkyMlhfVEFHX1BSSU9fTSwgKHgpKSB8IFlUOTIyWF9UQUdfUFJJT19FTilcbiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX1JYX1BPUlRfTVx0XHRHRU5NQVNLKDUsIDIpXG4mIzQzOyNkZWZpbmUgWVQ5MjJYX1RBR19SWF9QUklPX01cdFx0R0VOTUFTSygxNSwgMTMpXG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxuJiM0Mzt5dDkyMnhfdGFnX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdXNlcl90b19wb3J0KG5ldGRldik7XG4mIzQzO1x0X19iZTE2ICp0YWc7XG4mIzQzO1x0dTE2IGN0cmw7XG4mIzQzO1xuJiM0MztcdHNrYl9wdXNoKHNrYiwgWVQ5MjFYX1RBR19MRU4pO1xuJiM0MztcdGRzYV9hbGxvY19ldHlwZV9oZWFkZXIoc2tiLCBZVDkyMVhfVEFHX0xFTik7XG4mIzQzO1x0dGFnID0gZHNhX2V0eXBlX2hlYWRlcl9wb3NfdHgoc2tiKTtcbiYjNDM7XG4mIzQzO1x0dGFnWzBdID0gaHRvbnMoRVRIX1BfWVQ5MjFYKTtcbiYjNDM7XHRpZiAoZHAtXHUwMDNlaW5kZXggIT0gMCkge1xuJiM0MztcdFx0LyogUG9ydCBpbmRleCBpcyBub3QgZXF1YWwgMCBpbiB0YWdbMV0gKi9cbiYjNDM7XHRcdGN0cmwgPSBZVDkyMlhfVEFHX1BSSU8oc2tiLVx1MDAzZXByaW9yaXR5KSB8IFlUOTIyWF9UQUdfRk9SQ0VfRFNUIHxcbiYjNDM7XHRcdFx0WVQ5MjJYX1RBR19QT1JUUyhkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBuZXRkZXYpIC0gMSk7XG4mIzQzO1x0XHR0YWdbMV0gPSBodG9ucyhjdHJsKTtcbiYjNDM7XHRcdHRhZ1syXSA9IDA7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIFBvcnQgMCBpbiBiaXQxNSBpbiB0YWdbMl0gKi9cbiYjNDM7XHRcdGN0cmwgPSBZVDkyMlhfVEFHX1BSSU8oc2tiLVx1MDAzZXByaW9yaXR5KSB8IFlUOTIyWF9UQUdfRk9SQ0VfRFNUO1xuJiM0MztcdFx0dGFnWzFdID0gaHRvbnMoY3RybCk7XG4mIzQzO1x0XHRjdHJsID0gWVQ5MjJYX1RBR19QT1JUTUFTS18wO1xuJiM0MztcdFx0dGFnWzJdID0gaHRvbnMoY3RybCk7XG4mIzQzO1x0fVxuJiM0MztcdHRhZ1szXSA9IDA7XG4mIzQzO1xuJiM0MztcdHJldHVybiBza2I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG4mIzQzO3l0OTIyeF90YWdfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcG9ydDtcbiYjNDM7XHRfX2JlMTYgKnRhZztcbiYjNDM7XHR1MTYgcng7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghcHNrYl9tYXlfcHVsbChza2IsIFlUOTIxWF9UQUdfTEVOKSkpIHtcbiYjNDM7XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0YWcgPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc19yeChza2IpO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkodGFnWzBdICE9IGh0b25zKEVUSF9QX1lUOTIxWCkpKSB7XG4mIzQzO1x0XHRkZXZfd2Fybl9yYXRlbGltaXRlZChcdTAwMjZuZXRkZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7VW5leHBlY3RlZCBFdGhlclR5cGUgMHglMDR4XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgICAgbnRvaHModGFnWzBdKSk7XG4mIzQzO1x0XHRrZnJlZV9za2Ioc2tiKTtcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogTG9jYXRlIHdoaWNoIHBvcnQgdGhpcyBpcyBjb21pbmcgZnJvbSAqL1xuJiM0MztcdHJ4ID0gbnRvaHModGFnWzJdKTtcbiYjNDM7XHRwb3J0ID0gRklFTERfR0VUKFlUOTIyWF9UQUdfUlhfUE9SVF9NLCByeCk7XG4mIzQzO1x0c2tiLVx1MDAzZWRldiA9IGRzYV9jb25kdWl0X2ZpbmRfdXNlcihuZXRkZXYsIDAsIHBvcnQpO1xuJiM0MztcdGlmICh1bmxpa2VseSghc2tiLVx1MDAzZWRldikpIHtcbiYjNDM7XHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKFx1MDAyNm5ldGRldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0ICAgICBcJiMzNDtDb3VsZG4mIzM5O3QgZGVjb2RlIHNvdXJjZSBwb3J0ICV1XFxuXCYjMzQ7LCBwb3J0KTtcbiYjNDM7XHRcdGtmcmVlX3NrYihza2IpO1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBSZW1vdmUgdGFnIGFuZCB1cGRhdGUgY2hlY2tzdW0gKi9cbiYjNDM7XHRza2JfcHVsbF9yY3N1bShza2IsIFlUOTIxWF9UQUdfTEVOKTtcbiYjNDM7XHRkc2Ffc3RyaXBfZXR5cGVfaGVhZGVyKHNrYiwgWVQ5MjFYX1RBR19MRU4pO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gc2tiO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIHl0OTIyeF9uZXRkZXZfb3BzID0ge1xuJiM0MztcdC5uYW1lICAgPSBZVDkyMlhfVEFHX05BTUUsXG4mIzQzO1x0LnByb3RvICA9IERTQV9UQUdfUFJPVE9fWVQ5MjJYLFxuJiM0MztcdC54bWl0ICAgPSB5dDkyMnhfdGFnX3htaXQsXG4mIzQzO1x0LnJjdiAgICA9IHl0OTIyeF90YWdfcmN2LFxuJiM0MztcdC5uZWVkZWRfaGVhZHJvb20gPSBZVDkyMVhfVEFHX0xFTixcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO0RTQV9UQUdfRFJJVkVSKHl0OTIyeF9uZXRkZXZfb3BzKTtcbiYjNDM7TU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fWVQ5MjJYLCBZVDkyMlhfVEFHX05BTUUpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBkc2FfdGFnX2RyaXZlciAqZHNhX3RhZ19kcml2ZXJfYXJyYXlbXSA9IHtcbiYjNDM7XHRcdTAwMjZEU0FfVEFHX0RSSVZFUl9OQU1FKHl0OTIxeF9uZXRkZXZfb3BzKSxcbiYjNDM7XHRcdTAwMjZEU0FfVEFHX0RSSVZFUl9OQU1FKHl0OTIyeF9uZXRkZXZfb3BzKSxcbiYjNDM7fTtcbiYjNDM7bW9kdWxlX2RzYV90YWdfZHJpdmVycyhkc2FfdGFnX2RyaXZlcl9hcnJheSk7XG4mIzQzO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7RFNBIHRhZyBkcml2ZXIgZm9yIE1vdG9yY29tbSBZVDkyMXggYW5kIFlUOTIyeCBzd2l0Y2hlc1wmIzM0Oyk7XG4mIzQzO01PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzQzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjIxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjI0IGV0aGVybmV0IHN3aXRjaCBjaGlwIHRvIHRoZSB5dDkyMXggRFNBIGRyaXZlciBhbmQgYSBjb3JyZXNwb25kaW5nIERTQSB0YWcgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIGFuIE1ESU8gZHJpdmVyIHRoYXQgcmVsaWVzIG9uIERldmljZSBUcmVlIChPRiBtYXRjaCBkYXRhKSB0byBwcm9iZSwgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBvciBkeW5hbWljYWxseSBpbmplY3RhYmxlIGluIHN0YW5kYXJkIHg4Nl82NCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIEZ1cnRoZXJtb3JlLCB0aGUgRFNBIHRhZyBkcml2ZXIgY2Fubm90IGJlIHJlYWNoZWQgYmVjYXVzZSBubyBlbXVsYXRlZCBEU0Egc3dpdGNoIChsaWtlIGRzYV9sb29wKSBjYW4gYmUgY29uZmlndXJlZCB0byB1c2UgdGhlIG5ld2x5IGFkZGVkIERTQV9UQUdfUFJPVE9fWVQ5MjJYIHByb3RvY29sLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYjkzMWU5MDJmMTgxZWExODI1MGI1OWFjOTQ3MzgyNWRkMWYyYjE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMTQgMDI6MjE6MjUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCmluZGV4IDRhYjU2N2M1YmJhZmMuLjY5YzgyNGZkOTViZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnCkBAIC0xNTksMTEgJiM0MzsxNTksMTEgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNCiAJICBhbmQgVlNDNzM5OCBTcGFyWCBpbnRlZ3JhdGVkIGV0aGVybmV0IHN3aXRjaGVzLCBjb25uZWN0ZWQgb3ZlcgogCSAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS4KIAotY29uZmlnIE5FVF9EU0FfWVQ5MjFYCi0JdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQmIzM0OwotCXNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVgKJiM0Mztjb25maWcgTkVUX0RTQV9ZVDkyWFgKJiM0MzsJdHJpc3RhdGUgJiMzNDtNb3RvcmNvbW0gWVQ5MjE1IGFuZCBZVDkyMjQgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydCYjMzQ7CiYjNDM7CXNlbGVjdCBORVRfRFNBX1RBR19ZVDkyWFgKIAlzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQgogCWhlbHAKLQkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2gKJiM0MzsJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgYW5kIFlUOTIyNCBldGhlcm5ldCBzd2l0Y2gKIAkgIGNoaXAuCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGUKaW5kZXggZDI5NzViYWRmZmMwOS4uMThjMmNlZWYwOWE1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZQpAQCAtMTQsNyAmIzQzOzE0LDcgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pICYjNDM7PSBsYW45MzAzX21kaW8ubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LWNvcmUubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNKSAmIzQzOz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9TUEkpICYjNDM7PSB2aXRlc3NlLXZzYzczeHgtc3BpLm8KLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgJiM0Mzs9IHl0OTIxeC5vCiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MlhYKSAmIzQzOz0geXQ5MjF4Lm8KIG9iai15CQkJCSYjNDM7PSBiNTMvCiBvYmoteQkJCQkmIzQzOz0gaGlyc2NobWFubi8KIG9iai15CQkJCSYjNDM7PSBsYW50aXEvCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMKaW5kZXggMTU5YjE2NjA2ZjZjYS4uNzQyNTU1Zjg3ODE5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguYwpAQCAtMTQ4LDEwICYjNDM7MTQ4LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7CiAJCVlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDgpLAogCQlZVDkyMVhfUE9SVF9NQVNLX0VYVDAgfCBZVDkyMVhfUE9SVF9NQVNLX0VYVDEsCiAJfSwKJiM0MzsJewomIzQzOwkJJiMzNDtZVDkyMjQmIzM0OywgWVQ5MjI0X01BSk9SLCAwLCAwLAomIzQzOwkJMHgxZjEsCiYjNDM7CQkweDAsCiYjNDM7CX0sCiAJe30KIH07CiAKLSNkZWZpbmUgWVQ5MjFYX05BTUUJJiMzNDt5dDkyMXgmIzM0OwomIzQzOyNkZWZpbmUgWVQ5MlhYX05BTUUJJiMzNDt5dDkyeHgmIzM0OwogCiAjZGVmaW5lIFlUOTIxWF9WSURfVU5XQVJFCTQwOTUKIApAQCAtNTYwLDEwICYjNDM7NTY1LDEyIEBAIHl0OTIxeF9pbnRpZl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKQogc3RhdGljIGludCB5dDkyMXhfbWJ1c19pbnRfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcpCiB7CiAJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy0mZ3Q7cHJpdjsKJiM0MzsJaW50IG1heF9wb3J0czsKIAl1MTYgdmFsOwogCWludCByZXM7CiAKLQlpZiAocG9ydCAmZ3Q7PSBZVDkyMVhfUE9SVF9OVU0pCiYjNDM7CW1heF9wb3J0cyA9IHByaXYtJmd0O2NoaXBfaW5mby0mZ3Q7cG9ydHM7CiYjNDM7CWlmIChwb3J0ICZndDs9IG1heF9wb3J0cykKIAkJcmV0dXJuIFUxNl9NQVg7CiAKIAltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwpAQCAtNTc5LDkgJiM0Mzs1ODYsMTEgQEAgc3RhdGljIGludAogeXQ5MjF4X21idXNfaW50X3dyaXRlKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IGRhdGEpCiB7CiAJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy0mZ3Q7cHJpdjsKJiM0MzsJaW50IG1heF9wb3J0czsKIAlpbnQgcmVzOwogCi0JaWYgKHBvcnQgJmd0Oz0gWVQ5MjFYX1BPUlRfTlVNKQomIzQzOwltYXhfcG9ydHMgPSBwcml2LSZndDtjaGlwX2luZm8tJmd0O3BvcnRzOwomIzQzOwlpZiAocG9ydCAmZ3Q7PSBtYXhfcG9ydHMpCiAJCXJldHVybiAtRU5PREVWOwogCiAJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKQEAgLTU5NiwxOSAmIzQzOzYwNSwyMSBAQCB5dDkyMXhfbWJ1c19pbnRfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbW5wKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKIAlzdHJ1Y3QgbWlpX2J1cyAqbWJ1czsKJiM0MzsJaW50IG1heF9wb3J0czsKIAlpbnQgcmVzOwogCiAJbWJ1cyA9IGRldm1fbWRpb2J1c19hbGxvYyhkZXYpOwogCWlmICghbWJ1cykKIAkJcmV0dXJuIC1FTk9NRU07CiAKJiM0MzsJbWF4X3BvcnRzID0gcHJpdi0mZ3Q7Y2hpcF9pbmZvLSZndDtwb3J0czsKIAltYnVzLSZndDtuYW1lID0gJiMzNDtZVDkyMXggaW50ZXJuYWwgTURJTyBidXMmIzM0OzsKIAlzbnByaW50ZihtYnVzLSZndDtpZCwgTUlJX0JVU19JRF9TSVpFLCAmIzM0OyVzJiMzNDssIGRldl9uYW1lKGRldikpOwogCW1idXMtJmd0O3ByaXYgPSBwcml2OwogCW1idXMtJmd0O3JlYWQgPSB5dDkyMXhfbWJ1c19pbnRfcmVhZDsKIAltYnVzLSZndDt3cml0ZSA9IHl0OTIxeF9tYnVzX2ludF93cml0ZTsKIAltYnVzLSZndDtwYXJlbnQgPSBkZXY7Ci0JbWJ1cy0mZ3Q7cGh5X21hc2sgPSAodTMyKX5HRU5NQVNLKFlUOTIxWF9QT1JUX05VTSAtIDEsIDApOwomIzQzOwltYnVzLSZndDtwaHlfbWFzayA9ICh1MzIpfkdFTk1BU0sobWF4X3BvcnRzIC0gMSwgMCk7CiAKIAlyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApOwogCWlmIChyZXMpCkBAIC00NzQ4LDYgJiM0Mzs0NzU5LDEzIEBAIHN0YXRpYyBpbnQgeXQ5MjF4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsKIAlpbnQgcmVzOwogCiYjNDM7CWZvciAoc2l6ZV90IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShwcml2LSZndDtwb3J0cyk7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1tpXTsKJiM0MzsKJiM0MzsJCXBwLSZndDtpbmRleCA9IGk7CiYjNDM7CQlJTklUX0RFTEFZRURfV09SSygmYW1wO3BwLSZndDttaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTsKJiM0MzsJfQomIzQzOwogCW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiAJcmVzID0geXQ5MjF4X2NoaXBfcmVzZXQocHJpdik7CiAJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwpAQCAtNDg2OSwxMTQgJiM0Mzs0ODg3LDkzNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHsKIAkuc2V0dXAJCQk9IHl0OTIxeF9kc2Ffc2V0dXAsCiB9OwogCi1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7c3RhdGljIGludCB5dDkyMnhfcG9ydF9kb3duKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpCiB7Ci0Jc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTsKJiM0MzsJdTMyIG1hc2s7CiYjNDM7CWludCByZXM7CiAKLQlpZiAoIXByaXYpCi0JCXJldHVybjsKJiM0MzsJLyogbWFjIGZvcmNlIGRvd24gKi8KJiM0MzsJbWFzayA9IFlUOTIyWF9QT1JUX0xJTksgfCBZVDkyMlhfUE9SVF9SWF9NQUNfRU4gfAomIzQzOwkgICAgICAgWVQ5MjJYX1BPUlRfVFhfTUFDX0VOIHwgWVQ5MjJYX1BPUlRfTElOS19BTjsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHByaXYsIFlUOTIyWF9QT1JUbl9DVFJMKHBvcnQpLCBtYXNrKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CS8qIE5lZWQgZm9yY2Ugb3AgdG8gbWFrZSBzb2Z0IGNvbmZpZ3VyYXRpb24gZWZmZWN0aXZlICovCiYjNDM7CW1hc2sgPSBZVDkyMlhfUE9SVF9GT1JDRV9PUDsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfUE9SVG5fQ1RSTChwb3J0KSwgbWFzayk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwogCi0JZHNhX3N3aXRjaF9zaHV0ZG93bigmYW1wO3ByaXYtJmd0O2RzKTsKJiM0MzsJLyogZGlzYWJsZSBlbl9waHkgKi8KJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfVkFMVUUsIEJJVChwb3J0KSk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfT1ZFUldSSVRFLCBCSVQocG9ydCkpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHl0OTIxeF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7c3RhdGljIHZvaWQKJiM0Mzt5dDkyMnhfcGh5bGlua19tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJCQkgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpCiB7Ci0Jc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTsKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV9waHlsaW5rX3RvX3BvcnQoY29uZmlnKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHAtJmd0O2RzKTsKJiM0MzsJaW50IHBvcnQgPSBkcC0mZ3Q7aW5kZXg7CiYjNDM7CWludCByZXM7CiAKLQlpZiAoIXByaXYpCi0JCXJldHVybjsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjJ4X3BvcnRfZG93bihwcml2LCBwb3J0KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwogCi0JZm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi0mZ3Q7cG9ydHMpOyBpLS0gJmd0OyAwOyApIHsKLQkJc3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9ICZhbXA7cHJpdi0mZ3Q7cG9ydHNbaV07CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlkZXZfZXJyKGRwLSZndDtkcy0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxuJiMzNDssICYjMzQ7YnJpbmcgZG93biYjMzQ7LAomIzQzOwkJCXBvcnQsIHJlcyk7CiYjNDM7fQogCi0JCWRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtwcC0mZ3Q7bWliX3JlYWQpOwomIzQzO3N0YXRpYyBpbnQKJiM0Mzt5dDkyMnhfcG9ydF91cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJICAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsIGludCBzcGVlZCwgaW50IGR1cGxleCwKJiM0MzsJICAgICAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpCiYjNDM7ewomIzQzOwl1MzIgbWFzazsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CXN3aXRjaCAoc3BlZWQpIHsKJiM0MzsJY2FzZSBTUEVFRF8xMDoKJiM0MzsJCWN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFNQRUVEXzEwMDoKJiM0MzsJCWN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTUEVFRF8xMDAwOgomIzQzOwkJY3RybCA9IFlUOTIxWF9QT1JUX1NQRUVEXzEwMDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTUEVFRF8yNTAwOgomIzQzOwkJY3RybCA9IFlUOTIxWF9QT1JUX1NQRUVEXzI1MDA7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBTUEVFRF8xMDAwMDoKJiM0MzsJCWN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDAwMDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiAJfQomIzQzOwlpZiAoZHVwbGV4ID09IERVUExFWF9GVUxMKQomIzQzOwkJY3RybCB8PSBZVDkyMlhfUE9SVF9EVVBMRVhfRlVMTDsKJiM0MzsJaWYgKHR4X3BhdXNlKQomIzQzOwkJY3RybCB8PSBZVDkyMlhfUE9SVF9UWF9QQVVTRTsKJiM0MzsJaWYgKHJ4X3BhdXNlKQomIzQzOwkJY3RybCB8PSBZVDkyMlhfUE9SVF9SWF9QQVVTRTsKJiM0MzsJY3RybCB8PSBZVDkyMlhfUE9SVF9SWF9NQUNfRU4gfCBZVDkyMlhfUE9SVF9UWF9NQUNfRU4gfAomIzQzOwkJWVQ5MjJYX1BPUlRfQ0ZHX1RYX0VOIHwgWVQ5MjJYX1BPUlRfTElOSyB8CiYjNDM7CQlZVDkyMlhfUE9SVF9DRkdfUlhfRU47CiYjNDM7CWN0cmwgJmFtcDs9IH4oWVQ5MjJYX1BPUlRfRkNfQU4gfCBZVDkyMlhfUE9SVF9MSU5LX0FOKTsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUE9SVG5fQ1RSTChwb3J0KSwgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwkvKiBmb3JjZSBvcCAqLwomIzQzOwltYXNrID0gWVQ5MjJYX1BPUlRfRk9SQ0VfT1A7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCksIG1hc2spOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKIAotCWRzYV91bnJlZ2lzdGVyX3N3aXRjaCgmYW1wO3ByaXYtJmd0O2RzKTsKJiM0MzsJLyogZW5hYmxlIGVuX3BoeSAqLwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfVkFMVUUsIEJJVChwb3J0KSk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfT1ZFUldSSVRFLCBCSVQocG9ydCkpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKIAotCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpICZsdDsgQVJSQVlfU0laRShwcml2LSZndDthY2xfYmxrcyk7IGkmIzQzOyYjNDM7KSB7Ci0JCXN0cnVjdCB5dDkyMXhfYWNsX2JsayAqYWNsYmxrID0gcHJpdi0mZ3Q7YWNsX2Jsa3NbaV07CiYjNDM7CXJldHVybiAwOwomIzQzO30KIAotCQlpZiAoIWFjbGJsaykKLQkJCWNvbnRpbnVlOwotCQlmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiAmbHQ7IEFSUkFZX1NJWkUoYWNsYmxrLSZndDtydWxlcyk7IGomIzQzOyYjNDM7KSB7Ci0JCQlzdHJ1Y3QgeXQ5MjF4X2FjbF9ydWxlICphY2xydWxlID0gYWNsYmxrLSZndDtydWxlc1tqXTsKJiM0MztzdGF0aWMgdm9pZAomIzQzO3l0OTIyeF9waHlsaW5rX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLAomIzQzOwkJCSAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHVuc2lnbmVkIGludCBtb2RlLAomIzQzOwkJCSAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsIGludCBzcGVlZCwgaW50IGR1cGxleCwKJiM0MzsJCQkgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV9waHlsaW5rX3RvX3BvcnQoY29uZmlnKTsKJiM0MzsJc3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHAtJmd0O2RzKTsKJiM0MzsJaW50IHBvcnQgPSBkcC0mZ3Q7aW5kZXg7CiYjNDM7CWludCByZXM7CiAKLQkJCWlmICghYWNscnVsZSkKLQkJCQljb250aW51ZTsKLQkJCWt2ZnJlZShhY2xydWxlKTsKLQkJfQotCQlrdmZyZWUoYWNsYmxrKTsKLQl9Ci0JbXV0ZXhfZGVzdHJveSgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjJ4X3BvcnRfdXAocHJpdiwgcG9ydCwgbW9kZSwgaW50ZXJmYWNlLCBzcGVlZCwgZHVwbGV4LAomIzQzOwkJCSAgICAgdHhfcGF1c2UsIHJ4X3BhdXNlKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwomIzQzOwlpZiAocmVzKQomIzQzOwkJZGV2X2VycihkcC0mZ3Q7ZHMtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcbiYjMzQ7LCAmIzM0O2JyaW5nIHVwJiMzNDssCiYjNDM7CQkJcG9ydCwgcmVzKTsKIH0KIAotc3RhdGljIGludCB5dDkyMXhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIyeF9pbnRpZl9leHRfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgKnZhbHApCiB7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDttZGlvZGV2LSZndDtkZXY7Ci0Jc3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbzsKLQlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7Ci0Jc3RydWN0IGRzYV9zd2l0Y2ggKmRzOwomIzQzOwlpbnQgcmVzOwogCi0JcHJpdiA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwotCWlmICghcHJpdikKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWlmIChwb3J0ICZndDs9IFlUOTIyWF9QT1JUX05VTSkKJiM0MzsJCXJldHVybiAtRU5PREVWOwogCi0JbWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpOwotCWlmICghbWRpbykKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBwb3J0LCBZVDkyWFhfUEFHRV9TRUxFQ1QsIHJlZyk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwogCi0JbWRpby0mZ3Q7YnVzID0gbWRpb2Rldi0mZ3Q7YnVzOwotCW1kaW8tJmd0O2FkZHIgPSBtZGlvZGV2LSZndDthZGRyOwotCW1kaW8tJmd0O3N3aXRjaGlkID0gMDsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX3JlYWQocHJpdiwgcG9ydCwgWVQ5MlhYX1BBR0UsIHZhbHApOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKIAotCW11dGV4X2luaXQoJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KIAotCXByaXYtJmd0O3JlZ19vcHMgPSAmYW1wO3l0OTIxeF9yZWdfb3BzX21kaW87Ci0JcHJpdi0mZ3Q7cmVnX2N0eCA9IG1kaW87CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIxeF9pbnRpZl9leHRfd3JpdGUoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXM7CiAKLQlmb3IgKHNpemVfdCBpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocHJpdi0mZ3Q7cG9ydHMpOyBpJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1tpXTsKJiM0MzsJaWYgKHBvcnQgJmd0Oz0gWVQ5MjFYX1BPUlRfTlVNKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiAKLQkJcHAtJmd0O2luZGV4ID0gaTsKLQkJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtwcC0mZ3Q7bWliX3JlYWQsIHl0OTIxeF9wb2xsX21pYik7Ci0JfQomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfd3JpdGUocHJpdiwgcG9ydCwgWVQ5MlhYX1BBR0VfU0VMRUNULCByZWcpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKIAotCWRzID0gJmFtcDtwcml2LSZndDtkczsKLQlkcy0mZ3Q7ZGV2ID0gZGV2OwotCWRzLSZndDthc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7Ci0JZHMtJmd0O2RzY3BfcHJpb19tYXBwaW5nX2lzX2dsb2JhbCA9IHRydWU7Ci0JZHMtJmd0O3ByaXYgPSBwcml2OwotCWRzLSZndDtvcHMgPSAmYW1wO3l0OTIxeF9kc2Ffc3dpdGNoX29wczsKLQlkcy0mZ3Q7YWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDA7Ci0JZHMtJmd0O2FnZWluZ190aW1lX21heCA9IFUxNl9NQVggKiA1MDAwOwotCWRzLSZndDtwaHlsaW5rX21hY19vcHMgPSAmYW1wO3l0OTIxeF9waHlsaW5rX21hY19vcHM7Ci0JZHMtJmd0O251bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07Ci0JZHMtJmd0O251bV9wb3J0cyA9IFlUOTIxWF9QT1JUX05VTTsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIHBvcnQsIFlUOTJYWF9QQUdFLCB2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKIAotCW1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7CiYjNDM7CXJldHVybiAwOwomIzQzO30KIAotCXJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTsKJiM0MztzdGF0aWMgaW50IHl0OTIyeF9pbnRlcm5hbF9waHlhZGRyX2dldChpbnQgcG9ydCwKJiM0MzsJCQkJICAgICAgIGVudW0geXQ5MjJ4X3BoeV9yZWdfdHlwZSByZWdfdHlwZSwKJiM0MzsJCQkJICAgICAgIGVudW0geXQ5MjJ4X3BoeV9yZWdfc3BhY2UgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJaWYgKHBvcnQgJmd0Oz0gNCAmYW1wOyZhbXA7IHBvcnQgJmx0Oz0gNykgewomIzQzOwkJc3dpdGNoIChyZWdfdHlwZSkgewomIzQzOwkJY2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQ6CiYjNDM7CQkJcmVzID0gOTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9QSFlfQ09NTU9OX0VYVDoKJiM0MzsJCQlpZiAocG9ydCAmbHQ7PSA1ICZhbXA7JmFtcDsgcG9ydCAmZ3Q7PSA0KQomIzQzOwkJCQlyZXMgPSA0OwomIzQzOwkJCWVsc2UgaWYgKHBvcnQgJmx0Oz0gNyAmYW1wOyZhbXA7IHBvcnQgJmd0Oz0gNikKJiM0MzsJCQkJcmVzID0gNjsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVDoKJiM0MzsJCQlyZXMgPSAtRUlOVkFMOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlpZiAocmVnX3NwYWNlICE9IFlUOTIyWF9QSFlfUkVHX1NQQUNFX1BIWSkKJiM0MzsJCQkJcmVzID0gLUVJTlZBTDsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWlmIChwb3J0ID09IDgpIHsKJiM0MzsJCQlzd2l0Y2ggKHJlZ190eXBlKSB7CiYjNDM7CQkJY2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQ6CiYjNDM7CQkJCXJlcyA9IDk7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVDoKJiM0MzsJCQkJcmVzID0gODsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJY2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX01JSToKJiM0MzsJCQljYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfRVhUOgomIzQzOwkJCQlpZiAocmVnX3NwYWNlID09IFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJIHx8CiYjNDM7CQkJCSAgICByZWdfc3BhY2UgPT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfVVNYR01JSSkKJiM0MzsJCQkJCXJlcyA9IDg7CiYjNDM7CQkJCWVsc2UKJiM0MzsJCQkJCXJlcyA9IC1FSU5WQUw7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCWRlZmF1bHQ6CiYjNDM7CQkJCXJlcyA9IC1FSU5WQUw7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwkJfQomIzQzOwkJc3dpdGNoIChyZWdfdHlwZSkgewomIzQzOwkJY2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQ6CiYjNDM7CQkJcmVzID0gOTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVDoKJiM0MzsJCQlyZXMgPSAwOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX01JSToKJiM0MzsJCWNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9FWFQ6CiYjNDM7CQkJaWYgKHJlZ19zcGFjZSA9PSBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSB8fAomIzQzOwkJCSAgICByZWdfc3BhY2UgPT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfVVNYR01JSSkKJiM0MzsJCQkJcmVzID0gMDsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCXJlcyA9IC1FSU5WQUw7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCXJlcyA9IC1FSU5WQUw7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5MjF4X29mX21hdGNoW10gPSB7Ci0JeyAuY29tcGF0aWJsZSA9ICYjMzQ7bW90b3Jjb21tLHl0OTIxNSYjMzQ7IH0sCiYjNDM7c3RhdGljIGludCB5dDkyMnhfcG9ydF9zZHNfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LAomIzQzOwkJCQlwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJaW50IGFkZHI7CiYjNDM7CXUxNiBkYXRhOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlhZGRyID0geXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0KHBvcnQsCiYjNDM7CQkJCQkgICBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhULAomIzQzOwkJCQkJICAgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkpOwomIzQzOwlpZiAoYWRkciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJLyogd3JpdGUgcHJvdGVjdCAqLwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NGJlLCAweGQpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJLyogQ0RSICovCiYjNDM7CWlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMEJBU0VYKSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDA2LCAweDApOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwkJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQxNiwgMHgzNDU4KTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MDYsIDB4ODAwKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJCXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MTYsIDB4NDU1OCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsJLyogUExMICovCiYjNDM7CWlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2EsIDB4MTAwNik7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDNmLCAweDMwMjkpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwkJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQyYSwgMHhmMDcwKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2QsIDB4MjA3ZCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDNjLCAweDIwN2QpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwkJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzZiwgMHgzMDMyKTsKJiM0MzsJCWlmIChyZXMpCiYjNDM7CQkJcmV0dXJuIHJlczsKJiM0MzsJCXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2EsIDB4Nik7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CQlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDJhLCAweGYwNzApOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CS8qIFZDTyAqLwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDM5LCAweEMwKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CS8qIFZkYWMgKi8KJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ5MiwgMHg3ZjdmKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTEsIDB4N2YpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJLyogRXllICovCiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0NTQsIDB4ZjE0KTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTcsIDB4YTQ0KTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0Y2QsIDB4MCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NGFmLCAweDQ1ZTMpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ4YSwgMHhmZmYpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQwOCwgMHg3YzAwKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0ZDYsIDB4N2YpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ0ZiwgMHhmZjA4KTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CS8qIEZGRSAqLwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDhlLCAweDdkMDApOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweGQsIDB4NjBmKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CS8qIENUTEUgKi8KJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRiMCwgMHg4MDQpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRiMSwgMHg3Nzc0KTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0YWYsIDB4NDVlNyk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4MywgMHg1NjAzKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CW1zbGVlcCgyMCk7CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTIsIDB4N2ZmZik7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDkyLCAweDdmN2YpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJLyogQ1RMRSAqLwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4MjAwMCwgMHg0MCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4MjAwMCwgMHgwKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7CiYjNDM7CQlyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4MTA0MiwgMHg0OGMpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7ICAgIC8qIHNvZnQgcmVzZXQgKi8KJiM0MzsJYWRkciA9IHl0OTIyeF9pbnRlcm5hbF9waHlhZGRyX2dldChwb3J0LCBZVDkyMlhfUEhZX1JFR19UWVBFX01JSSwKJiM0MzsJCQkJCSAgIFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJKTsKJiM0MzsJaWYgKGFkZHIgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX3JlYWQocHJpdiwgYWRkciwgMHgyMDAwLCAmYW1wO2RhdGEpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJZGF0YSAmYW1wOz0gfigxICZsdDsmbHQ7IDE1KTsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIGFkZHIsIDB4MjAwMCwgZGF0YSk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlhZGRyID0geXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0KHBvcnQsIFlUOTIyWF9QSFlfUkVHX1RZUEVfTUlJLAomIzQzOwkJCQkJICAgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfVVNYR01JSSk7CiYjNDM7CWlmIChhZGRyICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9pbnRpZl9yZWFkKHByaXYsIGFkZHIsIDB4MCwgJmFtcDtkYXRhKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CWRhdGEgfD0gMSAmbHQ7Jmx0OyAxNTsKJiM0MzsJcmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIGFkZHIsIDB4MCwgZGF0YSk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludAomIzQzO3l0OTIyeF9wb3J0X2NvbmZpZyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJCSAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpCiYjNDM7ewomIzQzOwlpbnQgYWRkcjsKJiM0MzsJdTE2IGRhdGE7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQocG9ydCwKJiM0MzsJCQkJCSAgIFlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQsCiYjNDM7CQkJCQkgICBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSk7CiYjNDM7CWlmIChhZGRyICZsdDsgMCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlzd2l0Y2ggKGludGVyZmFjZSkgewomIzQzOwkvKiBTRVJERVMgKi8KJiM0MzsJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMEJBU0VYOgomIzQzOwljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6CiYjNDM7CWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDoKJiM0MzsJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSToKJiM0MzsJCXJlcyA9IHl0OTIyeF9wb3J0X3Nkc19pbml0KHByaXYsIHBvcnQsIGludGVyZmFjZSk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CQlhZGRyID0geXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0CiYjNDM7CQkJKHBvcnQsIFlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQsCiYjNDM7CQkJIFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJKTsKJiM0MzsJCWlmIChhZGRyICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJCXJlcyA9IHl0OTIyeF9pbnRpZl9leHRfcmVhZChwcml2LCBhZGRyLCBZVDkyMlhfUE9SVF9TRFNfTU9ERSwKJiM0MzsJCQkJCSAgICAmYW1wO2RhdGEpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkJZGF0YSAmYW1wOz0gKH4weDcgJmx0OyZsdDsgNCk7CiYjNDM7CQlzd2l0Y2ggKGludGVyZmFjZSkgewomIzQzOwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6CiYjNDM7CQkJZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sCiYjNDM7CQkJCQkgICBZVDkyWFhfU0VSREVTX01PREVfU0dNSUkpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwQkFTRVg6CiYjNDM7CQkJZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sCiYjNDM7CQkJCQkgICBZVDkyWFhfU0VSREVTX01PREVfMTAwQkFTRVgpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYOgomIzQzOwkJCWRhdGEgfD0gRklFTERfUFJFUChZVDkyMlhfUE9SVF9TRFNfTU9ERV9NLAomIzQzOwkJCQkJICAgWVQ5MlhYX1NFUkRFU19NT0RFXzEwMDBCQVNFWCk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVg6CiYjNDM7CQkJZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sCiYjNDM7CQkJCQkgICBZVDkyWFhfU0VSREVTX01PREVfMjUwMEJBU0VYKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6CiYjNDM7CQkJZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sCiYjNDM7CQkJCQkgICBZVDkyWFhfU0VSREVTX01PREVfVVNYR01JSSk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwkJcmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCBZVDkyMlhfUE9SVF9TRFNfTU9ERSwKJiM0MzsJCQkJCSAgICAgZGF0YSk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZAomIzQzO3l0OTIyeF9waHlsaW5rX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLAomIzQzOwkJCSAgY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpOwomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcC0mZ3Q7ZHMpOwomIzQzOwlpbnQgcG9ydCA9IGRwLSZndDtpbmRleDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjJ4X3BvcnRfY29uZmlnKHByaXYsIHBvcnQsIG1vZGUsIHN0YXRlLSZndDtpbnRlcmZhY2UpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlkZXZfZXJyKGRwLSZndDtkcy0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxuJiMzNDssICYjMzQ7Y29uZmlnJiMzNDssCiYjNDM7CQkJcG9ydCwgcmVzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgeXQ5MjJ4X3BoeWxpbmtfbWFjX29wcyA9IHsKJiM0MzsJLm1hY19saW5rX2Rvd24JPSB5dDkyMnhfcGh5bGlua19tYWNfbGlua19kb3duLAomIzQzOwkubWFjX2xpbmtfdXAJPSB5dDkyMnhfcGh5bGlua19tYWNfbGlua191cCwKJiM0MzsJLm1hY19jb25maWcJPSB5dDkyMnhfcGh5bGlua19tYWNfY29uZmlnLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbAomIzQzO3l0OTIyeF9kc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAomIzQzOwkJCSAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSkKJiM0Mzt7CiYjNDM7CXJldHVybiBEU0FfVEFHX1BST1RPX1lUOTIyWDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQKJiM0Mzt5dDkyMnhfZHNhX3BoeWxpbmtfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKJiM0MzsJCQkgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7CiYjNDM7CWNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyAqaW5mbyA9IHByaXYtJmd0O2luZm87CiYjNDM7CiYjNDM7CWNvbmZpZy0mZ3Q7bWFjX2NhcGFiaWxpdGllcyA9IE1BQ19BU1lNX1BBVVNFIHwgTUFDX1NZTV9QQVVTRSB8CiYjNDM7CQkJCSAgIE1BQ18xMCB8IE1BQ18xMDAgfCBNQUNfMTAwMDsKJiM0MzsKJiM0MzsJaWYgKGluZm8tJmd0O2ludGVybmFsX21hc2sgJmFtcDsgQklUKHBvcnQpKSB7CiYjNDM7CQlpZiAocG9ydCAmZ3Q7PSA0ICZhbXA7JmFtcDsgcG9ydCAmbHQ7PSA3KSB7CiYjNDM7CQkJLyogcG9ydCA0IHRvIHBvcnQgNywgaW50ZXJuYWwgdXRwICovCiYjNDM7CQkJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCwKJiM0MzsJCQkJICBjb25maWctJmd0O3N1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsJCQljb25maWctJmd0O21hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzI1MDBGRDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSwKJiM0MzsJCQkJICBjb25maWctJmd0O3N1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsJCQlfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMEJBU0VYLAomIzQzOwkJCQkgIGNvbmZpZy0mZ3Q7c3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwkJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLAomIzQzOwkJCQkgIGNvbmZpZy0mZ3Q7c3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwkJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMjUwMEJBU0VYLAomIzQzOwkJCQkgIGNvbmZpZy0mZ3Q7c3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwkJCWNvbmZpZy0mZ3Q7bWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMEZEOwomIzQzOwkJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSSwKJiM0MzsJCQkJICBjb25maWctJmd0O3N1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsJCQljb25maWctJmd0O21hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzI1MDBGRDsKJiM0MzsJCQljb25maWctJmd0O21hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzUwMDBGRDsKJiM0MzsJCQljb25maWctJmd0O21hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDAwRkQ7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBleHRlcm5hbCBwb3J0IHdpbGwgYWRkZWQgbGF0ZXIgKi8KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHl0OTIyeF9wb3J0X3NldHVwKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSAmYW1wO3ByaXYtJmd0O2RzOwomIzQzOwl1MzIgbWFzazsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CS8qIGVuYWJsZSB1c2VyIHBvcnQgaXNvbGF0aW9uIGFuZCBkaXNhYmxlIGZkYiBsZWFybmluZyAqLwomIzQzOwljdHJsID0gfnByaXYtJmd0O2NwdV9wb3J0c19tYXNrOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9QT1JUbl9JU09MQVRJT04ocG9ydCksIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJbWFzayA9IFlUOTIyWF9QT1JUX0xFQVJOX0RJUzsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfUE9SVG5fTEVBUk4ocG9ydCksIG1hc2spOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJaWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpIHsKJiM0MzsJCWN0cmwgPSB+KHUzMikwOwomIzQzOwkJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfUE9SVG5fSVNPTEFUSU9OKHBvcnQpLAomIzQzOwkJCQkgICAgICAgY3RybCk7CiYjNDM7CQlpZiAocmVzKQomIzQzOwkJCXJldHVybiByZXM7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXQ5MjJ4X2RzYV9wb3J0X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CXJlcyA9IHl0OTIyeF9wb3J0X3NldHVwKHByaXYsIHBvcnQpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfZGV0ZWN0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTsKJiM0MzsJY29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvICppbmZvOwomIzQzOwl1MzIgY2hpcGlkOwomIzQzOwl1MzIgbWFqb3I7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ0hJUF9JRCwgJmFtcDtjaGlwaWQpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJbWFqb3IgPSBGSUVMRF9HRVQoWVQ5MjFYX0NISVBfSURfTUFKT1IsIGNoaXBpZCk7CiYjNDM7CWZvciAoaW5mbyA9IHl0OTIxeF9pbmZvczsgaW5mby0mZ3Q7bmFtZTsgaW5mbyYjNDM7JiM0MzspCiYjNDM7CQlpZiAoaW5mby0mZ3Q7bWFqb3IgPT0gbWFqb3IpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CWlmICghaW5mby0mZ3Q7bmFtZSkgewomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7VW5leHBlY3RlZCBjaGlwaWQgMHgleFxuJiMzNDssIGNoaXBpZCk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwlwcml2LSZndDtpbmZvID0gaW5mbzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJdTMyIHZhbDsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjJ4X2NoaXBfZGV0ZWN0KHByaXYpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJLyogUmVzZXQgKi8KJiM0MzsJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUlNULCBZVDkyMVhfUlNUX0hXKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CWZzbGVlcChZVDkyMVhfUlNUX0RFTEFZX1VTKTsKJiM0MzsKJiM0MzsJdmFsID0gMDsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9SU1QsIH4wLCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB5dDkyMnhfY2hpcF9zZXR1cF9kc2Eoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBjcHVfcG9ydHNfbWFzazsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCBwb3J0OwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwljdHJsID0gR0VOTUFTSyg5LCAwKTsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfRklMVEVSX1VOS19VQ0FTVCwgY3RybCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwljdHJsID0gMDsKJiM0MzsJZm9yIChpbnQgaSA9IDA7IGkgJmx0OyBwcml2LSZndDtjaGlwX2luZm8tJmd0O3BvcnRzOyBpJiM0MzsmIzQzOykKJiM0MzsJCWN0cmwgfD0gWVQ5MjJYX0FDVF9VTktfQUNUbl9UUkFQKGkpOwomIzQzOwljcHVfcG9ydHNfbWFzayA9IHByaXYtJmd0O2NwdV9wb3J0c19tYXNrOwomIzQzOwlmb3JfZWFjaF9zZXRfYml0KHBvcnQsICZhbXA7Y3B1X3BvcnRzX21hc2ssIHByaXYtJmd0O2NoaXBfaW5mby0mZ3Q7cG9ydHMpIHsKJiM0MzsJCWN0cmwgJmFtcDs9IH5ZVDkyMlhfQUNUX1VOS19BQ1RuX00ocG9ydCk7CiYjNDM7CQljdHJsIHw9IFlUOTIyWF9BQ1RfVU5LX0FDVG5fRFJPUChwb3J0KTsKJiM0MzsJfQomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9BQ1RfVU5LX1VDQVNULCBjdHJsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0FDVF9VTktfTUNBU1QsIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CWN0cmwgPSBZVDkyMlhfRlVOQ19NSUIgfCBZVDkyMlhfRlVOQ19BQ0w7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjFYX0ZVTkMsIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJcmVzID0geXQ5MjJ4X2NoaXBfc2V0dXBfZHNhKHByaXYpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXQ5MjJ4X2NwdV90YWdfbW9kZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwomIzQzOwl1MTYgZXRoX3BfdGFnOwomIzQzOwl1MzIgdmFsOwomIzQzOwl1MzIgdmFsMTsKJiM0MzsJaW50IHJlczsKJiM0MzsKJiM0MzsJLyogY3B1IHRhZyBtb2RlIHNldCAqLwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjJYX0NQVV9UQUdfUlhfQ1RSTCwgJmFtcDt2YWwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIyWF9DUFVfVEFHX1RYX0NUUkwsICZhbXA7dmFsMSk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwl2YWwgJmFtcDs9IH5ZVDkyMlhfQ1BVX1RBR19SWF9NT0RFOwomIzQzOwl2YWwxICZhbXA7PSB+WVQ5MjJYX0NQVV9UQUdfVFhfTU9ERTsKJiM0MzsJdmFsMSAmYW1wOz0gfllUOTIyWF9DUFVfVEFHX1RYX1RZUEU7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0NQVV9UQUdfUlhfQ1RSTCwgdmFsKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0NQVV9UQUdfVFhfQ1RSTCwgdmFsMSk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwomIzQzOwkvKiB0cGlkIGNoZWNrICovCiYjNDM7CXJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMVhfQ1BVX1RBR19UUElELCAmYW1wO3ZhbCk7CiYjNDM7CWlmIChyZXMpCiYjNDM7CQlyZXR1cm4gcmVzOwomIzQzOwlldGhfcF90YWcgPSBGSUVMRF9HRVQoWVQ5MjFYX0NQVV9UQUdfVFBJRF9UUElEX00sIHZhbCk7CiYjNDM7CWlmIChldGhfcF90YWcgIT0gRVRIX1BfWVQ5MjFYKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwgJiMzNDtUYWcgdHlwZSAweCV4ICE9IDB4JXhcbiYjMzQ7LCBldGhfcF90YWcsCiYjNDM7CQkJRVRIX1BfWVQ5MjFYKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHl0OTIyeF9jcHVfcG9ydF9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gJmFtcDtwcml2LSZndDtkczsKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXM7CiYjNDM7CiYjNDM7CS8qIGNwdSB0YWcgbW9kZSAqLwomIzQzOwlyZXMgPSB5dDkyMnhfY3B1X3RhZ19tb2RlX3NldChwcml2KTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CS8qIEVuYWJsZSBEU0EgKi8KJiM0MzsJcHJpdi0mZ3Q7Y3B1X3BvcnRzX21hc2sgPSBkc2FfY3B1X3BvcnRzKGRzKTsKJiM0MzsJY3RybCA9IFlUOTIxWF9FWFRfQ1BVX1BPUlRfVEFHX0VOIHwgWVQ5MjFYX0VYVF9DUFVfUE9SVF9QT1JUX0VOIHwKJiM0MzsJICAgICAgIFlUOTIxWF9FWFRfQ1BVX1BPUlRfUE9SVChfX2Zmcyhwcml2LSZndDtjcHVfcG9ydHNfbWFzaykpOwomIzQzOwlyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9FWFRfQ1BVX1BPUlQsIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJLyogU2V0dXAgc29mdHdhcmUgc3dpdGNoICovCiYjNDM7CWN0cmwgPSBZVDkyMlhfQ1BVX0NPUFlfVE9fRVhUX0NQVTsKJiM0MzsJcmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQ1BVX0NPUFksIGN0cmwpOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJcmV0dXJuIHJlczsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB5dDkyMnhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LSZndDtvZl9ub2RlOwomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlyZXMgPSB5dDkyMnhfY2hpcF9yZXNldChwcml2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJLyogUmVnaXN0ZXIgdGhlIGludGVybmFsIG1kaW8gYnVzLiAqLwomIzQzOwljaGlsZCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCAmIzM0O21kaW8mIzM0Oyk7CiYjNDM7CWlmIChjaGlsZCkgewomIzQzOwkJcmVzID0geXQ5MjF4X21idXNfaW50X2luaXQocHJpdiwgY2hpbGQpOwomIzQzOwkJb2Zfbm9kZV9wdXQoY2hpbGQpOwomIzQzOwkJaWYgKHJlcykKJiM0MzsJCQlyZXR1cm4gcmVzOwomIzQzOwl9CiYjNDM7CiYjNDM7CSAvKiBjcHUgcG9ydCBzZXQgKi8KJiM0MzsJIG11dGV4X2xvY2soJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7CSByZXMgPSB5dDkyMnhfY3B1X3BvcnRfc2V0KHByaXYpOwomIzQzOwkgbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7cmVnX2xvY2spOwomIzQzOwlpZiAocmVzKQomIzQzOwkJcmV0dXJuIHJlczsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJcmVzID0geXQ5MjJ4X2NoaXBfc2V0dXAocHJpdik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsJaWYgKHJlcykKJiM0MzsJCXJldHVybiByZXM7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIyeF9kc2Ffc3dpdGNoX29wcyA9IHsKJiM0MzsJLyogcG9ydCAqLwomIzQzOwkuZ2V0X3RhZ19wcm90b2NvbAk9IHl0OTIyeF9kc2FfZ2V0X3RhZ19wcm90b2NvbCwKJiM0MzsJLnBoeWxpbmtfZ2V0X2NhcHMJPSB5dDkyMnhfZHNhX3BoeWxpbmtfZ2V0X2NhcHMsCiYjNDM7CS5wb3J0X3NldHVwCQk9IHl0OTIyeF9kc2FfcG9ydF9zZXR1cCwKJiM0MzsJLyogY2hpcCAqLwomIzQzOwkuc2V0dXAJCQk9IHl0OTIyeF9kc2Ffc2V0dXAsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHl0OTJ4eF9jaGlwX2luZm8geXQ5Mnh4X2NoaXBfaW5mb190YWJsZVtdID0gewomIzQzOwlbWVQ5MjE1XSA9IHsKJiM0MzsJCS5tb2RlID0gWVQ5MjE1LAomIzQzOwkJLm5hbWUgPSAmIzM0O21vdG9yY29tbSB5dDkyMTUmIzM0OywKJiM0MzsJCS5wb3J0cyA9IFlUOTIxWF9QT1JUX05VTSwKJiM0MzsJCS5sYWdfaWQgPSBZVDkyMVhfTEFHX05VTSwKJiM0MzsJCS5hZ2VpbmdfdGltZV9taW4gPSAxICogNTAwMCwKJiM0MzsJCS5hZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMCwKJiM0MzsJCS5zd2l0Y2hfb3BzID0gJmFtcDt5dDkyMXhfZHNhX3N3aXRjaF9vcHMsCiYjNDM7CQkubWFjX29wcyA9ICZhbXA7eXQ5MjF4X3BoeWxpbmtfbWFjX29wcywKJiM0MzsJfSwKJiM0MzsJW1lUOTIyNF0gPSB7CiYjNDM7CQkubW9kZSA9IFlUOTIyNCwKJiM0MzsJCS5uYW1lID0gJiMzNDttb3RvcmNvbW0geXQ5MjI0JiMzNDssCiYjNDM7CQkucG9ydHMgPSBZVDkyMlhfUE9SVF9OVU0sCiYjNDM7CQkubGFnX2lkID0gWVQ5MjJYX0xBR19OVU0sCiYjNDM7CQkuYWdlaW5nX3RpbWVfbWluID0gMSAqIDYwMDAsCiYjNDM7CQkuYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDYwMDAsCiYjNDM7CQkuc3dpdGNoX29wcyA9ICZhbXA7eXQ5MjJ4X2RzYV9zd2l0Y2hfb3BzLAomIzQzOwkJLm1hY19vcHMgPSAmYW1wO3l0OTIyeF9waHlsaW5rX21hY19vcHMsCiYjNDM7CX0sCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB5dDkyeHhfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpOwomIzQzOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWRzYV9zd2l0Y2hfc2h1dGRvd24oJmFtcDtwcml2LSZndDtkcyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHl0OTJ4eF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpOwomIzQzOwomIzQzOwlpZiAoIXByaXYpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWZvciAoc2l6ZV90IGkgPSBBUlJBWV9TSVpFKHByaXYtJmd0O3BvcnRzKTsgaS0tICZndDsgMDsgKSB7CiYjNDM7CQlzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gJmFtcDtwcml2LSZndDtwb3J0c1tpXTsKJiM0MzsKJiM0MzsJCWRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoJmFtcDtwcC0mZ3Q7bWliX3JlYWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRzYV91bnJlZ2lzdGVyX3N3aXRjaCgmYW1wO3ByaXYtJmd0O2RzKTsKJiM0MzsKJiM0MzsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHByaXYtJmd0O2FjbF9ibGtzKTsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCB5dDkyMXhfYWNsX2JsayAqYWNsYmxrID0gcHJpdi0mZ3Q7YWNsX2Jsa3NbaV07CiYjNDM7CiYjNDM7CQlpZiAoIWFjbGJsaykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWZvciAodW5zaWduZWQgaW50IGogPSAwOyBqICZsdDsgQVJSQVlfU0laRShhY2xibGstJmd0O3J1bGVzKTsgaiYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgeXQ5MjF4X2FjbF9ydWxlICphY2xydWxlID0gYWNsYmxrLSZndDtydWxlc1tqXTsKJiM0MzsKJiM0MzsJCQlpZiAoIWFjbHJ1bGUpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCWt2ZnJlZShhY2xydWxlKTsKJiM0MzsJCX0KJiM0MzsJCWt2ZnJlZShhY2xibGspOwomIzQzOwl9CiYjNDM7CW11dGV4X2Rlc3Ryb3koJmFtcDtwcml2LSZndDtyZWdfbG9jayk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXQ5Mnh4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHl0OTJ4eF9jaGlwX2luZm8gKmNvbXBhdF9pbmZvID0gTlVMTDsKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDttZGlvZGV2LSZndDtkZXY7CiYjNDM7CXN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87CiYjNDM7CXN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdjsKJiM0MzsJc3RydWN0IGRzYV9zd2l0Y2ggKmRzOwomIzQzOwomIzQzOwljb21wYXRfaW5mbyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpOwomIzQzOwlpZiAoIWNvbXBhdF9pbmZvKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CW1kaW8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1kaW8pLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFtZGlvKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CW1kaW8tJmd0O2J1cyA9IG1kaW9kZXYtJmd0O2J1czsKJiM0MzsJbWRpby0mZ3Q7YWRkciA9IG1kaW9kZXYtJmd0O2FkZHI7CiYjNDM7CW1kaW8tJmd0O3N3aXRjaGlkID0gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O3JlZ19sb2NrKTsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7Y2hpcF9pbmZvID0gY29tcGF0X2luZm87CiYjNDM7CXByaXYtJmd0O3JlZ19vcHMgPSAmYW1wO3l0OTIxeF9yZWdfb3BzX21kaW87CiYjNDM7CXByaXYtJmd0O3JlZ19jdHggPSBtZGlvOwomIzQzOwomIzQzOwlkcyA9ICZhbXA7cHJpdi0mZ3Q7ZHM7CiYjNDM7CWRzLSZndDtkZXYgPSBkZXY7CiYjNDM7CWRzLSZndDthc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7CiYjNDM7CWRzLSZndDtkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlOwomIzQzOwlkcy0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CWRzLSZndDtvcHMgPSBjb21wYXRfaW5mby0mZ3Q7c3dpdGNoX29wczsKJiM0MzsJZHMtJmd0O2FnZWluZ190aW1lX21pbiA9IGNvbXBhdF9pbmZvLSZndDthZ2VpbmdfdGltZV9taW47CiYjNDM7CWRzLSZndDthZ2VpbmdfdGltZV9tYXggPSBjb21wYXRfaW5mby0mZ3Q7YWdlaW5nX3RpbWVfbWF4OwomIzQzOwlkcy0mZ3Q7cGh5bGlua19tYWNfb3BzID0gY29tcGF0X2luZm8tJmd0O21hY19vcHM7CiYjNDM7CWRzLSZndDtudW1fbGFnX2lkcyA9IGNvbXBhdF9pbmZvLSZndDtsYWdfaWQ7CiYjNDM7CWRzLSZndDtudW1fcG9ydHMgPSBjb21wYXRfaW5mby0mZ3Q7cG9ydHM7CiYjNDM7CiYjNDM7CW1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7CiYjNDM7CiYjNDM7CXJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5Mnh4X29mX21hdGNoW10gPSB7CiYjNDM7CXsKJiM0MzsJCS5jb21wYXRpYmxlID0gJiMzNDttb3RvcmNvbW0seXQ5MjE1JiMzNDssCiYjNDM7CQkuZGF0YSA9ICZhbXA7eXQ5Mnh4X2NoaXBfaW5mb190YWJsZVtZVDkyMTVdLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQkuY29tcGF0aWJsZSA9ICYjMzQ7bW90b3Jjb21tLHl0OTIyNCYjMzQ7LAomIzQzOwkJLmRhdGEgPSAmYW1wO3l0OTJ4eF9jaGlwX2luZm9fdGFibGVbWVQ5MjI0XSwKJiM0MzsJfSwKIAl7fQogfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTIxeF9vZl9tYXRjaCk7CiYjNDM7TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeXQ5Mnh4X29mX21hdGNoKTsKIAotc3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyMXhfbWRpb19kcml2ZXIgPSB7Ci0JLnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsCi0JLnJlbW92ZSA9IHl0OTIxeF9tZGlvX3JlbW92ZSwKLQkuc2h1dGRvd24gPSB5dDkyMXhfbWRpb19zaHV0ZG93biwKJiM0MztzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTJ4eF9tZGlvX2RyaXZlciA9IHsKJiM0MzsJLnByb2JlID0geXQ5Mnh4X21kaW9fcHJvYmUsCiYjNDM7CS5yZW1vdmUgPSB5dDkyeHhfbWRpb19yZW1vdmUsCiYjNDM7CS5zaHV0ZG93biA9IHl0OTJ4eF9tZGlvX3NodXRkb3duLAogCS5tZGlvZHJ2LmRyaXZlciA9IHsKLQkJLm5hbWUgPSBZVDkyMVhfTkFNRSwKLQkJLm9mX21hdGNoX3RhYmxlID0geXQ5MjF4X29mX21hdGNoLAomIzQzOwkJLm5hbWUgPSBZVDkyWFhfTkFNRSwKJiM0MzsJCS5vZl9tYXRjaF90YWJsZSA9IHl0OTJ4eF9vZl9tYXRjaCwKIAl9LAogfTsKIAotbWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7CiYjNDM7bWRpb19tb2R1bGVfZHJpdmVyKHl0OTJ4eF9tZGlvX2RyaXZlcik7CiAKIE1PRFVMRV9BVVRIT1IoJiMzNDtEYXZpZCBZYW5nICZsdDttbXlhbmdmbEBnbWFpbC5jb20mZ3Q7JiMzNDspOwotTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7RHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IFN3aXRjaCYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7S3lsZSBTd2l0Y2ggJmx0O2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tJmd0OyYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtEcml2ZXIgZm9yIE1vdG9yY29tbSBZVDkyMXggYW5kIFlUOTIyeCBTd2l0Y2gmIzM0Oyk7CiBNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaAppbmRleCA1ZjNiOTllMTg5YzQxLi4wMzA4ZTZiOTE2MThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oCkBAIC04MzcsNiAmIzQzOzgzNyw3IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMgewogCiAjZGVmaW5lIFlUOTIxNV9NQUpPUgkweDkwMDIKICNkZWZpbmUgWVQ5MjE4X01BSk9SCTB4OTAwMQomIzQzOyNkZWZpbmUgWVQ5MjI0X01BSk9SCTB4OTAwNAogCiAvKiByZXF1aXJlZCBmb3IgYSBoYXJkIHJlc2V0ICovCiAjZGVmaW5lIFlUOTIxWF9SU1RfREVMQVlfVVMJMTAwMDAKQEAgLTg1Myw2ICYjNDM7ODU0LDk2IEBAIGVudW0geXQ5MjF4X2ZkYl9lbnRyeV9zdGF0dXMgewogLyogOCBpbnRlcm5hbCAmIzQzOyAyIGV4dGVybmFsICYjNDM7IDEgbWN1ICovCiAjZGVmaW5lIFlUOTIxWF9QT1JUX05VTQkJCTExCiAKJiM0MzsvKiB5dDkyMnggcmVnaXN0ZXIgbGlzdHMgKi8KJiM0MzsjZGVmaW5lIFlUOTJYWF9QQUdFX1NFTEVDVAkweDFlCiYjNDM7I2RlZmluZSBZVDkyWFhfUEFHRQkJMHgxZgomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCkgICAgICAgICAgICAgICAgKDB4ODAwODAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX0NUUkxfUEFVU0VfQU4gICAgICBCSVQoMTApCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVG5fU1RBVFVTKHBvcnQpICAgICAgKDB4ODAyMDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lIFlUOTIyWF9FTl9QSFlfT1ZFUldSSVRFICAgKDB4ODAwNDApCiYjNDM7I2RlZmluZSBZVDkyMlhfRU5fUEhZX1ZBTFVFICAgICAgICgweDgwMDNjKQomIzQzOy8qIENUUkw6IGZvcmNlIG9wIHRvIG1ha2Ugc29mdCBjb25maWd1cmF0aW9uIGVmZmVjdGl2ZSAqLwomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfRk9SQ0VfT1AgICAgICAgICAgIEJJVCgxNCkKJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX0NGR19UWF9FTiAgICAgICBCSVQoMTMpCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9DRkdfUlhfRU4gICAgICAgQklUKDEyKQomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfRkNfQU4gICAgICAgICAgICBCSVQoMTEpCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9MSU5LX0FOICAgICAgICAgICAgQklUKDEwKSAgLyogQ1RSTDogYXV0byBuZWdvdGlhdGlvbiAqLwomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfTElOSyAgICAgICAgICAgICAgIEJJVCg5KSAgLyogQ1RSTDogbGluayBzdGF0dXMgKi8KJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX0hBTEZfUEFVU0UgICAgICAgICBCSVQoOCkgIC8qIEhhbGYtZHVwbGV4IGJhY2sgcHJlc3N1cmUgbW9kZSAqLwomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfRFVQTEVYX0ZVTEwgICAgICAgICAgICAgICAgQklUKDcpCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9SWF9QQVVTRSAgICAgICAgICAgQklUKDYpCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9UWF9QQVVTRSAgICAgICAgICAgQklUKDUpCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9SWF9NQUNfRU4gICAgICAgICAgQklUKDQpCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9UWF9NQUNfRU4gICAgICAgICAgQklUKDMpCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9TUEVFRF9NICAgICAgICAgICAgR0VOTUFTSygyLCAwKQomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfU0RTX01PREUgICAgICAgICAgIDB4NDAwCiYjNDM7I2RlZmluZSBZVDkyMlhfUE9SVF9TRFNfTU9ERV9NICAgICAgICAgR0VOTUFTSyg2LCA0KQomIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFX1NHTUlJICAgICAgICAgICAgICAgICAgICAgICAwCiYjNDM7I2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfUkVWU0dNSUkgICAgICAgICAgICAgICAgICAgIDEKJiM0MzsjZGVmaW5lIFlUOTJYWF9TRVJERVNfTU9ERV8xMDAwQkFTRVggICAgICAgICAgICAgICAgICAgMgomIzQzOyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFXzEwMEJBU0VYICAgICAgICAgICAgICAgICAgICAzCiYjNDM7I2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfMjUwMEJBU0VYICAgICAgICAgICAgICAgICAgIDQKJiM0MzsjZGVmaW5lIFlUOTJYWF9TRVJERVNfTU9ERV9VU1hHTUlJICAgICAgICAgICAgICAgICAgICAgNgomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRfTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDkKJiM0MzsvKiBMQUcgKi8KJiM0MzsjZGVmaW5lIFlUOTIyWF9MQUdfTlVNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNAomIzQzOy8qIElTTyAqLwomIzQzOyNkZWZpbmUgWVQ5MjJYX1BPUlRuX0lTT0xBVElPTihwb3J0KSAgICAgICAgICAgKDB4NCAqIChwb3J0KSAmIzQzOyAweDE4MGQ4MCkKJiM0MzsvKiBGREIgKi8KJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUbl9MRUFSTihwb3J0KSAgICAgICAoMHgxODAzMDAgJiM0MzsgNCAqIChwb3J0KSkKJiM0MzsjZGVmaW5lIFlUOTIyWF9QT1JUX0xFQVJOX0RJUyAgICAgICAgICBCSVQoMTgpCiYjNDM7LyogR0xPQkFMIENUUkwgKi8KJiM0MzsjZGVmaW5lICBZVDkyMlhfRlVOQ19BQ0wgICAgICAgICAgICAgICBCSVQoNSkKJiM0MzsjZGVmaW5lICBZVDkyMlhfRlVOQ19NSUIgICAgICAgICAgICAgICBCSVQoNCkKJiM0MzsvKiBDVFJMIFBLVCAqLwomIzQzOyNkZWZpbmUgWVQ5MjJYX0ZJTFRFUl9VTktfVUNBU1QgICAgICAgICAgICAgICAgICAgICAgICAweDE4MGVjOAomIzQzOyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfVUNBU1QgICAgICAgICAgICAgICAgICAgMHgxODBlZDgKJiM0MzsjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX01DQVNUICAgICAgICAgICAgICAgICAgIDB4MTgwZWUwCiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19NQ0FTVF9CWVBBU1NfRFJPUF9QSU0gICBCSVQoMjIpCiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19NQ0FTVF9CWVBBU1NfRFJPUF9NTEQgICBCSVQoMjEpCiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19NQ0FTVF9CWVBBU1NfRFJPUF9JR01QICBCSVQoMjApCiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX00ocG9ydCkgICAgICAgICAgICBHRU5NQVNLKDIgKiAocG9ydCkgJiM0MzsgMSwgMiAqIChwb3J0KSkKJiM0MzsjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX0FDVG4ocG9ydCwgeCkgICAgICAgICAgICgoeCkgJmx0OyZsdDsgKDIgKiAocG9ydCkpKQomIzQzOyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfQUNUbl9GT1JXQVJEKHBvcnQpICAgICAgWVQ5MjJYX0FDVF9VTktfQUNUbihwb3J0LCAwKSAgLyogZmxvb2QgKi8KJiM0MzsjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX0FDVG5fVFJBUChwb3J0KSAgICAgICAgIFlUOTIyWF9BQ1RfVU5LX0FDVG4ocG9ydCwgMykgIC8qIHN0ZWVyIHRvIENQVSAqLwomIzQzOyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfQUNUbl9EUk9QKHBvcnQpICAgICAgICAgWVQ5MjJYX0FDVF9VTktfQUNUbihwb3J0LCAxKSAgLyogZGlzY2FyZCAqLwomIzQzOy8qIE5FVkVSIHVzZSB0aGlzIGFjdGlvbjsgc2VlIGNvbW1lbnRzIGluIHRoZSB0YWcgZHJpdmVyICovCiYjNDM7I2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX0NPUFkocG9ydCkgICAgICAgICBZVDkyMlhfQUNUX1VOS19BQ1RuKHBvcnQsIDIpICAvKiBmbG9vZCBhbmQgY29weSAqLwomIzQzOwomIzQzOy8qIENQVSBQT1JUICovCiYjNDM7I2RlZmluZSBZVDkyMlhfQ1BVX0NPUFkJCQkweDE4MTEwMAomIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9DT1BZX1RPX0lOVF9DUFUJQklUKDEpCiYjNDM7I2RlZmluZSBZVDkyMlhfQ1BVX0NPUFlfVE9fRVhUX0NQVQlCSVQoMCkKJiM0MzsjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1JYX0NUUkwJCTB4ODA1MDQKJiM0MzsjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1JYX01PREUJCUJJVCgwKQomIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfQ1RSTAkJMHgxMDA3MTAKJiM0MzsjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1RYX1RZUEUJCUJJVCgwKQomIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfTU9ERQkJQklUKDEpCiYjNDM7I2RlZmluZSBZVDkyMlhfQ1BVX1RBR19UWF9DVEFHX09QCUJJVCgyKQomIzQzOyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfU1RBR19PUAlCSVQoMykKJiM0MzsKJiM0MztlbnVtIHl0OTIyeF9waHlfcmVnX3R5cGUgewomIzQzOwlZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQsCiYjNDM7CVlUOTIyWF9QSFlfUkVHX1RZUEVfUEhZX0NPTU1PTl9FWFQsCiYjNDM7CVlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQsCiYjNDM7CVlUOTIyWF9QSFlfUkVHX1RZUEVfTUlJLAomIzQzOwlZVDkyMlhfUEhZX1JFR19UWVBFX0VYVCwKJiM0MzsJWVQ5MjJYX1BIWV9SRUdfVFlQRV9NTUQxLAomIzQzOwlZVDkyMlhfUEhZX1JFR19UWVBFX01NRDMsCiYjNDM7CVlUOTIyWF9QSFlfUkVHX1RZUEVfTU1ENywKJiM0MzsJWVQ5MjJYX1BIWV9SRUdfVFlQRV9NQVgKJiM0Mzt9OwomIzQzOwomIzQzO2VudW0geXQ5MjJ4X3BoeV9yZWdfc3BhY2UgewomIzQzOwlZVDkyMlhfUEhZX1JFR19TUEFDRV9QSFksCiYjNDM7CVlUOTIyWF9QSFlfUkVHX1NQQUNFX1BIWV9UMSwKJiM0MzsJWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfUEhZX0xEUywKJiM0MzsJWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUksCiYjNDM7CVlUOTIyWF9QSFlfUkVHX1NQQUNFX1VTWEdNSUksCiYjNDM7CVlUOTIyWF9QSFlfUkVHX1NQQUNFX1FTR01JSSwKJiM0MzsJWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfTUFYCiYjNDM7fTsKJiM0MzsKICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSAmbHQ7IDgpCiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICgocG9ydCkgPT0gOCB8fCAocG9ydCkgPT0gOSkKIApAQCAtOTQ1LDkgJiM0MzsxMDM2LDI2IEBAIHN0cnVjdCB5dDkyMXhfcmVnX29wcyB7CiAJaW50ICgqd3JpdGUpKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiB2YWwpOwogfTsKIAomIzQzO2VudW0geXQ5Mnh4X21vZGUgewomIzQzOwlZVDkyMTUsCiYjNDM7CVlUOTIyNCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0cnVjdCB5dDkyeHhfY2hpcF9pbmZvIHsKJiM0MzsJZW51bSB5dDkyeHhfbW9kZSBtb2RlOwomIzQzOwljb25zdCBjaGFyICpuYW1lOwomIzQzOwl1bnNpZ25lZCBpbnQgcG9ydHM7CiYjNDM7CXVuc2lnbmVkIGludCBsYWdfaWQ7CiYjNDM7CXVuc2lnbmVkIGludCBhZ2VpbmdfdGltZV9taW47CiYjNDM7CXVuc2lnbmVkIGludCBhZ2VpbmdfdGltZV9tYXg7CiYjNDM7CWNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyAqc3dpdGNoX29wczsKJiM0MzsJY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyAqbWFjX29wczsKJiM0Mzt9OwomIzQzOwogc3RydWN0IHl0OTIxeF9wcml2IHsKIAlzdHJ1Y3QgZHNhX3N3aXRjaCBkczsKIAomIzQzOwljb25zdCBzdHJ1Y3QgeXQ5Mnh4X2NoaXBfaW5mbyAqY2hpcF9pbmZvOwogCWNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyAqaW5mbzsKIAl1bnNpZ25lZCBpbnQgbWV0ZXJfc2xvdF9uczsKIAl1bnNpZ25lZCBpbnQgcG9ydF9zaGFwZV9zbG90X25zOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHNhLmggYi9pbmNsdWRlL25ldC9kc2EuaAppbmRleCA2ZjdmNWMxN2I1MzIwLi4wYzAzM2NhNjViOTIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc2EuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9kc2EuaApAQCAtNjAsNiAmIzQzOzYwLDcgQEAgc3RydWN0IHRjX2FjdGlvbjsKICNkZWZpbmUgRFNBX1RBR19QUk9UT19NWEw4NjJfVkFMVUUJCTMyCiAjZGVmaW5lIERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRQkJMzMKICNkZWZpbmUgRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFCQkzNAomIzQzOyNkZWZpbmUgRFNBX1RBR19QUk9UT19ZVDkyMlhfVkFMVUUgICAgICAgICAgICAgIDM1CiAKIGVudW0gZHNhX3RhZ19wcm90b2NvbCB7CiAJRFNBX1RBR19QUk9UT19OT05FCQk9IERTQV9UQUdfUFJPVE9fTk9ORV9WQUxVRSwKQEAgLTk3LDYgJiM0Mzs5OCw3IEBAIGVudW0gZHNhX3RhZ19wcm90b2NvbCB7CiAJRFNBX1RBR19QUk9UT19NWEw4NjIJCT0gRFNBX1RBR19QUk9UT19NWEw4NjJfVkFMVUUsCiAJRFNBX1RBR19QUk9UT19ORVRDCQk9IERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRSwKIAlEU0FfVEFHX1BST1RPX0tTWjg0NjMJCT0gRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFLAomIzQzOwlEU0FfVEFHX1BST1RPX1lUOTIyWAkJPSBEU0FfVEFHX1BST1RPX1lUOTIyWF9WQUxVRSwKIH07CiAKIHN0cnVjdCBkc2Ffc3dpdGNoOwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9LY29uZmlnIGIvbmV0L2RzYS9LY29uZmlnCmluZGV4IGQ1ZTcyNWI5MGQ3ODUuLmU0ZmQzYTlhNjYyMTEgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL0tjb25maWcKQEAgLTIxNSwxMCAmIzQzOzIxNSwxMCBAQCBjb25maWcgTkVUX0RTQV9UQUdfWFJTNzAwWAogCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yCiAJICBBcnJvdyBTcGVlZENoaXBzIFhSUzcwMHggc3dpdGNoZXMgdGhhdCB1c2UgYSBzaW5nbGUgYnl0ZSB0YWcgdHJhaWxlci4KIAotY29uZmlnIE5FVF9EU0FfVEFHX1lUOTIxWAotCXRyaXN0YXRlICYjMzQ7VGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlcyYjMzQ7CiYjNDM7Y29uZmlnIE5FVF9EU0FfVEFHX1lUOTJYWAomIzQzOwl0cmlzdGF0ZSAmIzM0O1RhZyBkcml2ZXIgZm9yIE1vdG9yY29tbSBZVDkyMXggYW5kIFlUOTIyeCBzd2l0Y2hlcyYjMzQ7CiAJaGVscAogCSAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yCi0JICBNb3RvcmNvbW0gWVQ5MjF4IHN3aXRjaGVzLgomIzQzOwkgIE1vdG9yY29tbSBZVDkyMXggYW5kIFlUOTIyeCBzd2l0Y2hlcy4KIAogZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9kc2EvTWFrZWZpbGUgYi9uZXQvZHNhL01ha2VmaWxlCmluZGV4IGI4YzI2NjdjZDE0YWEuLjJkNzJhMjVmZDk4NDYgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvTWFrZWZpbGUKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2RzYS9NYWtlZmlsZQpAQCAtNDIsNyAmIzQzOzQyLDcgQEAgb2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1NKQTExMDUpICYjNDM7PSB0YWdfc2phMTEwNS5vCiBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfVFJBSUxFUikgJiM0Mzs9IHRhZ190cmFpbGVyLm8KIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19WU0M3M1hYXzgwMjFRKSAmIzQzOz0gdGFnX3ZzYzczeHhfODAyMXEubwogb2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1hSUzcwMFgpICYjNDM7PSB0YWdfeHJzNzAweC5vCi1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfWVQ5MjFYKSAmIzQzOz0gdGFnX3l0OTIxeC5vCiYjNDM7b2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1lUOTJYWCkgJiM0Mzs9IHRhZ195dDkyMXgubwogCiAjIGZvciB0cmFjaW5nIGZyYW1ld29yayB0byBmaW5kIHRyYWNlLmgKIENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpCmRpZmYgLS1naXQgYS9uZXQvZHNhL3RhZ195dDkyMXguYyBiL25ldC9kc2EvdGFnX3l0OTIxeC5jCmluZGV4IDI5NDc4NGFiNjY5NGIuLmEzMDEyZWMzOTg2ODYgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvdGFnX3l0OTIxeC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvdGFnX3l0OTIxeC5jCkBAIC0xLDggJiM0MzsxLDEwIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlcgogLyoKICAqIE1vdG9yY29tbSBZVDkyMXggU3dpdGNoIEV4dGVuZGVkIENQVSBQb3J0IFRhZ2dpbmcKJiM0MzsgKiBNb3RvcmNvbW0gWVQ5MjJ4IFN3aXRjaCBFeHRlbmRlZCBDUFUgUG9ydCBUYWdnaW5nCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDI1IERhdmlkIFlhbmcgJmx0O21teWFuZ2ZsQGdtYWlsLmNvbSZndDsKJiM0MzsgKiBDb3B5cmlnaHQgKGMpIDIwMjYgS3lsZSBzd2l0Y2ggJmx0O2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tJmd0OwogICoKICAqICYjNDM7LS0tLSYjNDM7LS0tLSYjNDM7LS0tLS0tLSYjNDM7LS0tLS0mIzQzOy0tLS0mIzQzOy0tLS0tLS0tLQogICogfCBEQSB8IFNBIHwgVGFnRVQgfCBUYWcgfCBFVCB8IFBheWxvYWQgLi4uCkBAIC0xNjYsOCAmIzQzOzE2OCwxMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyB5dDkyMXhfbmV0ZGV2X29wcyA9IHsKIAkubmVlZGVkX2hlYWRyb29tID0gWVQ5MjFYX1RBR19MRU4sCiB9OwogCi1NT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtEU0EgdGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlcyYjMzQ7KTsKLU1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwomIzQzO0RTQV9UQUdfRFJJVkVSKHl0OTIxeF9uZXRkZXZfb3BzKTsKIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX1lUOTIxWCwgWVQ5MjFYX1RBR19OQU1FKTsKIAotbW9kdWxlX2RzYV90YWdfZHJpdmVyKHl0OTIxeF9uZXRkZXZfb3BzKTsKJiM0MzsvKiBUbyBkZWZpbmUgdGhlIGZyb20gY3B1IHRhZyBmb3JtYXQgOCBieXRlczoKJiM0MzsgKgomIzQzOyAqIDAgMSAyIDMgNCA1IDYgNyB8MCAxIDIgMyA0IDUgNiA3CiYjNDM7ICp8Jmx0Oy0tLS0tLS0tLS0tLVRQSUQgMHg5OTg4LS0tLS0tLSZndDt8CiYjNDM7ICp8Jmx0Oy0tUkVTRVJWRS0tJmd0O3wmbHQ7LS0tLS1EU1QgUE9SLS0tLSZndDt8CiYjNDM7ICp8LXwmbHQ7LS0tLS0tLS0tUkVTRVJWRS0tLS0tLS0tLS0tLSZndDt8CiYjNDM7ICp8Jmx0Oy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSZndDt8CiYjNDM7ICovCiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX05BTUUJCQkmIzM0O3l0OTIyeCYjMzQ7CiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX1BPUlRNQVNLXzAJCUJJVCgxNSkKJiM0MzsjZGVmaW5lIFlUOTIyWF9UQUdfUE9SVE1BU0tfTQkJR0VOTUFTSyg4LCAwKQomIzQzOyNkZWZpbmUgWVQ5MjJYX1RBR19QT1JUUyh4KQkJRklFTERfUFJFUChZVDkyMlhfVEFHX1BPUlRNQVNLX00sICh4KSkKJiM0MzsjZGVmaW5lIFlUOTIyWF9UQUdfRk9SQ0VfRFNUCQlCSVQoOSkKJiM0MzsjZGVmaW5lIFlUOTIyWF9UQUdfUFJJT19NCQlHRU5NQVNLKDEyLCAxMCkKJiM0MzsjZGVmaW5lIFlUOTIyWF9UQUdfUFJJT19FTgkJQklUKDEzKQomIzQzOyNkZWZpbmUgWVQ5MjJYX1RBR19QUklPKHgpCQkoRklFTERfUFJFUChZVDkyMlhfVEFHX1BSSU9fTSwgKHgpKSB8IFlUOTIyWF9UQUdfUFJJT19FTikKJiM0MzsjZGVmaW5lIFlUOTIyWF9UQUdfUlhfUE9SVF9NCQlHRU5NQVNLKDUsIDIpCiYjNDM7I2RlZmluZSBZVDkyMlhfVEFHX1JYX1BSSU9fTQkJR0VOTUFTSygxNSwgMTMpCiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBza19idWZmICoKJiM0Mzt5dDkyMnhfdGFnX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfdXNlcl90b19wb3J0KG5ldGRldik7CiYjNDM7CV9fYmUxNiAqdGFnOwomIzQzOwl1MTYgY3RybDsKJiM0MzsKJiM0MzsJc2tiX3B1c2goc2tiLCBZVDkyMVhfVEFHX0xFTik7CiYjNDM7CWRzYV9hbGxvY19ldHlwZV9oZWFkZXIoc2tiLCBZVDkyMVhfVEFHX0xFTik7CiYjNDM7CXRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3R4KHNrYik7CiYjNDM7CiYjNDM7CXRhZ1swXSA9IGh0b25zKEVUSF9QX1lUOTIxWCk7CiYjNDM7CWlmIChkcC0mZ3Q7aW5kZXggIT0gMCkgewomIzQzOwkJLyogUG9ydCBpbmRleCBpcyBub3QgZXF1YWwgMCBpbiB0YWdbMV0gKi8KJiM0MzsJCWN0cmwgPSBZVDkyMlhfVEFHX1BSSU8oc2tiLSZndDtwcmlvcml0eSkgfCBZVDkyMlhfVEFHX0ZPUkNFX0RTVCB8CiYjNDM7CQkJWVQ5MjJYX1RBR19QT1JUUyhkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBuZXRkZXYpIC0gMSk7CiYjNDM7CQl0YWdbMV0gPSBodG9ucyhjdHJsKTsKJiM0MzsJCXRhZ1syXSA9IDA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBQb3J0IDAgaW4gYml0MTUgaW4gdGFnWzJdICovCiYjNDM7CQljdHJsID0gWVQ5MjJYX1RBR19QUklPKHNrYi0mZ3Q7cHJpb3JpdHkpIHwgWVQ5MjJYX1RBR19GT1JDRV9EU1Q7CiYjNDM7CQl0YWdbMV0gPSBodG9ucyhjdHJsKTsKJiM0MzsJCWN0cmwgPSBZVDkyMlhfVEFHX1BPUlRNQVNLXzA7CiYjNDM7CQl0YWdbMl0gPSBodG9ucyhjdHJsKTsKJiM0MzsJfQomIzQzOwl0YWdbM10gPSAwOwomIzQzOwomIzQzOwlyZXR1cm4gc2tiOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKgomIzQzO3l0OTIyeF90YWdfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgcG9ydDsKJiM0MzsJX19iZTE2ICp0YWc7CiYjNDM7CXUxNiByeDsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgWVQ5MjFYX1RBR19MRU4pKSkgewomIzQzOwkJa2ZyZWVfc2tiKHNrYik7CiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwl0YWcgPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc19yeChza2IpOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkodGFnWzBdICE9IGh0b25zKEVUSF9QX1lUOTIxWCkpKSB7CiYjNDM7CQlkZXZfd2Fybl9yYXRlbGltaXRlZCgmYW1wO25ldGRldi0mZ3Q7ZGV2LAomIzQzOwkJCQkgICAgICYjMzQ7VW5leHBlY3RlZCBFdGhlclR5cGUgMHglMDR4XG4mIzM0OywKJiM0MzsJCQkJICAgICBudG9ocyh0YWdbMF0pKTsKJiM0MzsJCWtmcmVlX3NrYihza2IpOwomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogTG9jYXRlIHdoaWNoIHBvcnQgdGhpcyBpcyBjb21pbmcgZnJvbSAqLwomIzQzOwlyeCA9IG50b2hzKHRhZ1syXSk7CiYjNDM7CXBvcnQgPSBGSUVMRF9HRVQoWVQ5MjJYX1RBR19SWF9QT1JUX00sIHJ4KTsKJiM0MzsJc2tiLSZndDtkZXYgPSBkc2FfY29uZHVpdF9maW5kX3VzZXIobmV0ZGV2LCAwLCBwb3J0KTsKJiM0MzsJaWYgKHVubGlrZWx5KCFza2ItJmd0O2RldikpIHsKJiM0MzsJCWRldl93YXJuX3JhdGVsaW1pdGVkKCZhbXA7bmV0ZGV2LSZndDtkZXYsCiYjNDM7CQkJCSAgICAgJiMzNDtDb3VsZG4mIzM5O3QgZGVjb2RlIHNvdXJjZSBwb3J0ICV1XG4mIzM0OywgcG9ydCk7CiYjNDM7CQlrZnJlZV9za2Ioc2tiKTsKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFJlbW92ZSB0YWcgYW5kIHVwZGF0ZSBjaGVja3N1bSAqLwomIzQzOwlza2JfcHVsbF9yY3N1bShza2IsIFlUOTIxWF9UQUdfTEVOKTsKJiM0MzsJZHNhX3N0cmlwX2V0eXBlX2hlYWRlcihza2IsIFlUOTIxWF9UQUdfTEVOKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHNrYjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyB5dDkyMnhfbmV0ZGV2X29wcyA9IHsKJiM0MzsJLm5hbWUgICA9IFlUOTIyWF9UQUdfTkFNRSwKJiM0MzsJLnByb3RvICA9IERTQV9UQUdfUFJPVE9fWVQ5MjJYLAomIzQzOwkueG1pdCAgID0geXQ5MjJ4X3RhZ194bWl0LAomIzQzOwkucmN2ICAgID0geXQ5MjJ4X3RhZ19yY3YsCiYjNDM7CS5uZWVkZWRfaGVhZHJvb20gPSBZVDkyMVhfVEFHX0xFTiwKJiM0Mzt9OwomIzQzOwomIzQzO0RTQV9UQUdfRFJJVkVSKHl0OTIyeF9uZXRkZXZfb3BzKTsKJiM0MztNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19ZVDkyMlgsIFlUOTIyWF9UQUdfTkFNRSk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBkc2FfdGFnX2RyaXZlciAqZHNhX3RhZ19kcml2ZXJfYXJyYXlbXSA9IHsKJiM0MzsJJmFtcDtEU0FfVEFHX0RSSVZFUl9OQU1FKHl0OTIxeF9uZXRkZXZfb3BzKSwKJiM0MzsJJmFtcDtEU0FfVEFHX0RSSVZFUl9OQU1FKHl0OTIyeF9uZXRkZXZfb3BzKSwKJiM0Mzt9OwomIzQzO21vZHVsZV9kc2FfdGFnX2RyaXZlcnMoZHNhX3RhZ19kcml2ZXJfYXJyYXkpOwomIzQzOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O0RTQSB0YWcgZHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IGFuZCBZVDkyMnggc3dpdGNoZXMmIzM0Oyk7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiYjNDM7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDY2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGU/IEEgRGVlcCBEaXZlIGludG8gdGhlIFlUOTIyNCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIyNCBzd2l0Y2ggY2hpcCB0byB0aGUgYHl0OTIxeGAgRFNBIGRyaXZlci4gIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cywgJiMzNDtIb3cgY2FuIEkgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGUgaW4gYSB0ZXN0aW5nIGVudmlyb25tZW50PyYjMzQ7IEl0JiMzOTtzIG1vZGlmeWluZyBgeXQ5MjF4LmNgLCBgeXQ5MjF4LmhgLCBgdGFnX3l0OTIxeC5jYCwgYW5kIHRoZSBLY29uZmlnL01ha2VmaWxlcyDigJMgYWxsIGdvb2Qgc3R1ZmYsIGJ1dCB1c2VsZXNzIGlmIEkgY2FuJiMzOTt0IHRyaWdnZXIgaXQuCgpSaWdodCwgc28gaXQmIzM5O3MgYW4gTURJTyBkcml2ZXIgKGB5dDkyeHhfbWRpb19kcml2ZXJgKS4gSXQgcmVnaXN0ZXJzIHVzaW5nIGBtZGlvX21vZHVsZV9kcml2ZXIoKWAuIFRoYXQgbWVhbnMgRGV2aWNlIFRyZWUgaXMgcHJvYmFibHkgdGhlIGtleSB0byBnZXR0aW5nIGl0IHByb2JlZC4gIENhbiBJIGVtdWxhdGUgdGhhdD8gQ2FuIEkgZmFrZSBpdCB3aXRoIGEgc29mdHdhcmUgTURJTyBidXM/IFN5emthbGxlciYjMzk7cyBncmVhdCwgYnV0IGRvZXMgaXQgaGF2ZSBhbnkgTURJTyBtYWdpYz8gIE5vLCBub3QgYSBnZW5lcmljIGZ1enplciB1bmxlc3MgaXQmIzM5O3Mgc3BlY2lmaWMgdG8gdGhlIHN1YnN5c3RlbS4gSG1tLCBzeXprYWxsZXIgKmNhbiogcHJvYmUgZGV2aWNlcyBpZiBpdCBoYXMgRFQgbm9kZXMsIGJ1dCBubyBhcmJpdHJhcnkgTURJTyBub2Rlcy4gRGFtbi4KCk9rYXksIGxldCYjMzk7cyBzdGVwIGJhY2suIEFueSBvdGhlciBlbnRyeSBwb2ludD8gIEhvdyBhYm91dCBgeXQ5Mnh4X21kaW9fcHJvYmVgPyAgSXQgcmVxdWlyZXMgYG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YSgpYCwgc28gaXQmIzM5O3MgZGVmaW5pdGVseSB0aWVkIHRvIERldmljZSBUcmVlIChgeXQ5Mnh4X29mX21hdGNoYCkuICBTbywgd2l0aG91dCBhIHJlYWwgZGV2aWNlIG9yIGEgY3VzdG9tIFFFTVUgc2V0dXAsIEkmIzM5O20gc3R1Y2suICBTeXprYWxsZXImIzM5O3MgYHN5el9kZXZsaW5rYCBpc24mIzM5O3QgZ29pbmcgdG8gaGVscC4gIElzIHRoZXJlIGV2ZW4gYW55IGVtdWxhdGlvbiBmb3IgdGhlIFlUOTIxNS9ZVDkyMjQgaW4gUUVNVT8gTm8uIFNvLCBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMgYXJlIGRlYWQgZW5kcyBmb3IgdGhpcyBwcm9iZSBmdW5jdGlvbi4gVGhlIGRyaXZlciYjMzk7cyBwcm9iZSBjb2RlIGxvb2tzIHVucmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZW52aXJvbm1lbnQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgbG9vayBkZWVwZXIuICBgeXQ5MjJ4X3RhZ194bWl0YCBhbmQgYHl0OTIyeF90YWdfcmN2YCBhcmUgaW4gYHRhZ195dDkyMXguY2AuIERTQSB0YWcgZHJpdmVycyBhcmUgb2Z0ZW4gYSBzZXBhcmF0ZSBiZWFzdC4gT2theSwgc28gRFNBIHRhZ2dlcnMgKmNvdWxkKiBiZSBoaXQgaWYgYSBEU0Egc3dpdGNoIGlzIGluc3RhbnRpYXRlZCwgb3IgaWYgSSBjYW4gc2V0IHRoZSB0YWcgcHJvdG9jb2wgb24gYSBnZW5lcmljIERTQSBzd2l0Y2ggbGlrZSBgZHNhX2xvb3BgIG9yIGBzYW5kYm94YC4gTm93IHdlJiMzOTtyZSBnZXR0aW5nIHNvbWV3aGVyZS4gV2FpdCwgSSBjYW4gYWN0dWFsbHkgKmNoYW5nZSogdGhlIHRhZyBwcm90b2NvbCBvbiBgZHNhX2xvb3BgPyAgWWVzISBUaW1lIHRvIGNoZWNrIGBkcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuY2AKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkc2FfbG9vcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3Q9MTU5PWFsbCBhdHRhY2hlZCBzd2l0Y2ggcG9ydHMgbXVzdCBiZSBkb3duIHdoaWxlIGRvaW5nIHRoaXMpLlxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0LTE2MC1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdDoxNjE6SXQgaXMgZGVzaXJhYmxlIHRoYXQgYWxsIHRhZ2dpbmcgcHJvdG9jb2xzIGFyZSB0ZXN0YWJsZSB3aXRoIHRoZSBgYGRzYV9sb29wYGBcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdC0xNjItbW9ja3VwIGRyaXZlciwgd2hpY2ggY2FuIGJlIGF0dGFjaGVkIHRvIGFueSBuZXR3b3JrIGludGVyZmFjZS4gVGhlIGdvYWwgaXMgdGhhdFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZT0zPWJjbS1zZjItb2Jqc1x0XHRcdDo9IGJjbV9zZjIubyBiY21fc2YyX2NmcC5vXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU6NDpvYmotJChDT05GSUdfTkVUX0RTQV9MT09QKVx0JiM0Mzs9IGRzYV9sb29wLm9cbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXHQmIzQzOz0ga3M4OTk1Lm9cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1OnN0cnVjdCBkc2FfbG9vcF92bGFuIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI2LVx0dTE2IG1lbWJlcnM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjktXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMDpzdHJ1Y3QgZHNhX2xvb3BfbWliX2VudHJ5IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxLVx0Y2hhciBuYW1lW0VUSF9HU1RSSU5HX0xFTl07XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTplbnVtIGRzYV9sb29wX21pYl9jb3VudGVycyB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNi1cdERTQV9MT09QX1BIWV9SRUFEX09LLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM6c3RydWN0IGRzYV9sb29wX3BvcnQge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ6XHRzdHJ1Y3QgZHNhX2xvb3BfbWliX2VudHJ5IG1pYltfX0RTQV9MT09QX0NOVF9NQVhdO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDUtXHR1MTYgcHZpZDtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5OnN0cnVjdCBkc2FfbG9vcF9wcml2IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwLVx0c3RydWN0IG1paV9idXNcdCpidXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MS1cdHVuc2lnbmVkIGludFx0cG9ydF9iYXNlO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTI6XHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiB2bGFuc1tWTEFOX05fVklEXTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUzLVx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU0Olx0c3RydWN0IGRzYV9sb29wX3BvcnQgcG9ydHNbRFNBX01BWF9QT1JUU107XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01NS19O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1NzpzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTgtXHQvKiBNdXN0IGJlIGZpcnN0LCBzdWNoIHRoYXQgZHNhX3JlZ2lzdGVyX3N3aXRjaCgpIGNhbiBhY2Nlc3MgdGhpc1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTY2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Njc6c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgZHNhX2xvb3BfbWlic1tdID0ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjgtXHRbRFNBX0xPT1BfUEhZX1JFQURfT0tdXHQ9IHsgXCYjMzQ7cGh5X3JlYWRfb2tcJiMzNDssIH0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NzU9c3RhdGljIHN0cnVjdCBtZGlvX2RldmljZSAqc3dpdGNoX21kaW9kZXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy03Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc3OmVudW0gZHNhX2xvb3BfZGV2bGlua19yZXNvdXJjZV9pZCB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy03OC1cdERTQV9MT09QX0RFVkxJTktfUEFSQU1fSURfTk9ORSwgIC8qIERFVkxJTktfUkVTT1VSQ0VfSURfUEFSRU5UX1RPUCAqL1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgxLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODI6c3RhdGljIHU2NCBkc2FfbG9vcF9kZXZsaW5rX3Z0dV9nZXQodm9pZCAqcHJpdilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgzLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjg0Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg1LVx0dW5zaWduZWQgaW50IGksIGNvdW50ID0gMDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjg2Olx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtODctXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo5NzpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk4LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk5LVx0c3RydWN0IGRldmxpbmtfcmVzb3VyY2Vfc2l6ZV9wYXJhbXMgc2l6ZV9wYXJhbXM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMDA6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTAxLVx0aW50IGVycjtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMTUtXHRcdFx0XHRcdCAgICAgIERTQV9MT09QX0RFVkxJTktfUEFSQU1fSURfVlRVLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTE2Olx0XHRcdFx0XHQgICAgICBkc2FfbG9vcF9kZXZsaW5rX3Z0dV9nZXQsIHBzKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNy1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMjQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMjU6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBkc2FfbG9vcF9nZXRfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVx0XHRcdFx0XHRcdCAgIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEzMy1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNDpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEzNS17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMzY6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTM3LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTM5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZHMtXHUwMDNlbnVtX3BvcnRzOyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE0MDpcdFx0bWVtY3B5KHBzLVx1MDAzZXBvcnRzW2ldLm1pYiwgZHNhX2xvb3BfbWlicyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE0MTpcdFx0ICAgICAgIHNpemVvZihkc2FfbG9vcF9taWJzKSk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDItXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTQ0LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQ1Olx0cmV0dXJuIGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ni19XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDctXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDg6c3RhdGljIHZvaWQgZHNhX2xvb3BfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTQ5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNTItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNTM6c3RhdGljIGludCBkc2FfbG9vcF9nZXRfc3NldF9jb3VudChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgc3NldClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE1NC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYwLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTYxOnN0YXRpYyB2b2lkIGRzYV9sb29wX2dldF9zdHJpbmdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjItXHRcdFx0XHQgdTMyIHN0cmluZ3NldCwgdWludDhfdCAqZGF0YSlcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2My17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjQ6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTY1LVx0dW5zaWduZWQgaW50IGk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTczLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTc0OnN0YXRpYyB2b2lkIGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNzUtXHRcdFx0XHQgICAgICAgdWludDY0X3QgKmRhdGEpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNzYte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTc3Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3OC1cdHVuc2lnbmVkIGludCBpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4My1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE4NDpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xODUte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTg2Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4Ny1cdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cdTAwM2VidXM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTk4LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTk5OnN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3dyaXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDAtXHRcdFx0ICAgICAgaW50IHJlZ251bSwgdTE2IHZhbHVlKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAxLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIwMjpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDMtXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHMtXHUwMDNlYnVzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIxNC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIxNTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIxNi1cdFx0XHRcdCAgICAgc3RydWN0IGRzYV9icmlkZ2UgYnJpZGdlLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIyNS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIyNjpzdGF0aWMgdm9pZCBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI3LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBkc2FfYnJpZGdlIGJyaWRnZSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyMzM6c3RhdGljIHZvaWQgZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzQtXHRcdFx0XHRcdHU4IHN0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzOS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI0MDpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9maWx0ZXJpbmcoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0MS1cdFx0XHRcdFx0Ym9vbCB2bGFuX2ZpbHRlcmluZyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNDktXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTA6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fYWRkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNTEtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNTUtXHRib29sIHB2aWQgPSB2bGFuLVx1MDAzZWZsYWdzIFx1MDAyNiBCUklER0VfVkxBTl9JTkZPX1BWSUQ7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTY6XHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cdTAwM2Vwcml2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU3LVx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBzLVx1MDAzZWJ1cztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1ODpcdHN0cnVjdCBkc2FfbG9vcF92bGFuICp2bDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1OS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyODM6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODQtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbilcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODYtXHRib29sIHVudGFnZ2VkID0gdmxhbi1cdTAwM2VmbGFncyBcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4NzpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcyA9IGRzLVx1MDAzZXByaXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODgtXHR1MTYgcHZpZCA9IHBzLVx1MDAzZXBvcnRzW3BvcnRdLnB2aWQ7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODktXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHMtXHUwMDNlYnVzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjkwOlx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxMC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEyLVx0XHRcdFx0ICAgIGludCBuZXdfbXR1KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEzLXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxNDpcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxNS1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjAtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjE6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X21heF9tdHUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyMi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzI1LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzYSwgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjctXHRcdFx0XHQgICAgICBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMzMtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzQ6c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBkc2FfbG9vcF9kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzU6XHQuZ2V0X3RhZ19wcm90b2NvbFx0PSBkc2FfbG9vcF9nZXRfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzY6XHQuc2V0dXBcdFx0XHQ9IGRzYV9sb29wX3NldHVwLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM3Olx0LnRlYXJkb3duXHRcdD0gZHNhX2xvb3BfdGVhcmRvd24sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMzg6XHQuZ2V0X3N0cmluZ3NcdFx0PSBkc2FfbG9vcF9nZXRfc3RyaW5ncyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzOTpcdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MDpcdC5nZXRfc3NldF9jb3VudFx0XHQ9IGRzYV9sb29wX2dldF9zc2V0X2NvdW50LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQxOlx0LmdldF9ldGh0b29sX3BoeV9zdGF0c1x0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MjpcdC5waHlfcmVhZFx0XHQ9IGRzYV9sb29wX3BoeV9yZWFkLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQzOlx0LnBoeV93cml0ZVx0XHQ9IGRzYV9sb29wX3BoeV93cml0ZSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NDpcdC5wb3J0X2JyaWRnZV9qb2luXHQ9IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDU6XHQucG9ydF9icmlkZ2VfbGVhdmVcdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2VfbGVhdmUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDY6XHQucG9ydF9zdHBfc3RhdGVfc2V0XHQ9IGRzYV9sb29wX3BvcnRfc3RwX3N0YXRlX3NldCxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NzpcdC5wb3J0X3ZsYW5fZmlsdGVyaW5nXHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9maWx0ZXJpbmcsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDg6XHQucG9ydF92bGFuX2FkZFx0XHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDk6XHQucG9ydF92bGFuX2RlbFx0XHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTA6XHQucG9ydF9jaGFuZ2VfbXR1XHQ9IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dSxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MTpcdC5wb3J0X21heF9tdHVcdFx0PSBkc2FfbG9vcF9wb3J0X21heF9tdHUsXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTI6XHQucGh5bGlua19nZXRfY2Fwc1x0PSBkc2FfbG9vcF9waHlsaW5rX2dldF9jYXBzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzUzLX07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTU6c3RhdGljIGludCBkc2FfbG9vcF9kcnZfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NzpcdHN0cnVjdCBkc2FfbG9vcF9wZGF0YSAqcGRhdGEgPSBtZGlvZGV2LVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU4Olx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU5LVx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Mi1cdGRzLVx1MDAzZWRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzgzOlx0ZHMtXHUwMDNlb3BzID0gXHUwMDI2ZHNhX2xvb3BfZHJpdmVyO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVx0ZHMtXHUwMDNlcHJpdiA9IHBzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM5NzpzdGF0aWMgdm9pZCBkc2FfbG9vcF9kcnZfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OC17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTktXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDAwOlx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDAxLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQxMTpzdGF0aWMgdm9pZCBkc2FfbG9vcF9kcnZfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDEyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjItXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MjM6c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBkc2FfbG9vcF9kcnYgPSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjQtXHQubWRpb2Rydi5kcml2ZXJcdD0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyNi1cdH0sXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjc6XHQucHJvYmVcdD0gZHNhX2xvb3BfZHJ2X3Byb2JlLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI4Olx0LnJlbW92ZVx0PSBkc2FfbG9vcF9kcnZfcmVtb3ZlLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI5Olx0LnNodXRkb3duID0gZHNhX2xvb3BfZHJ2X3NodXRkb3duLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDMwLX07XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzEtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzI6c3RhdGljIGludCBkc2FfbG9vcF9idXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDMzLVx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM1Olx0cmV0dXJuIGRydiA9PSBcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzYtfVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM3LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM4OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3Rlcih2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDY6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KHZvaWQpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDcte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ4Olx0c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9wZGF0YSBkc2FfbG9vcF9wZGF0YSA9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0OS1cdFx0LmNkID0ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MTpcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MjpcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXHUwMDI2ZHNhX2xvb3BfcGRhdGE7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NzMtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDgxLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDgyOnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4My17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDg2LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3Olx0cmV0ID0gZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODgtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5My1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcdHJldCA9IG1kaW9fZHJpdmVyX3JlZ2lzdGVyKFx1MDAyNmRzYV9sb29wX2Rydik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXHRpZiAocmV0KSB7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTY6XHRcdGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3RlcigpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDk3LVx0XHRtZGlvX2RldmljZV9yZW1vdmUoc3dpdGNoX21kaW9kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwMi19XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDM6bW9kdWxlX2luaXQoZHNhX2xvb3BfaW5pdCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDU6c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNi17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDc6XHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFx1MDAyNmRzYV9sb29wX2Rydik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDg6XHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwOS1cdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTExLX1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUxMjptb2R1bGVfZXhpdChkc2FfbG9vcF9leGl0KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTMxOAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDM0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIERTQSBUYWcgUHJvdG9jb2wgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byBob3cgRFNBIHRhZyBwcm90b2NvbHMgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGlua2luZyBhYm91dCB0aGUgYGRzYV9sb29wYCBkcml2ZXIuIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgdGhhdCBgZHNhX2xvb3BgIHVzZXMgYGRzYV9sb29wX2dldF9wcm90b2NvbGAsIHdoaWNoIHNlZW1zIHRvIGFsd2F5cyByZXR1cm4gYERTQV9UQUdfUFJPVE9fTk9ORWAuIFRoYXQmIzM5O3MgYSBiaXQgbGltaXRpbmcsIGlzbiYjMzk7dCBpdD8KCk15IG5leHQgdGhvdWdodCBpcywgY2FuIHdlIHNvbWVob3cgb3ZlcnJpZGUgdGhpcz8gQ2FuIHdlIG1hbmlwdWxhdGUgdGhlIHRhZyBwcm90b2NvbCB2aWEgZGV2bGluayBvciBzeXNmcz8gQnV0IHdhaXQsIGxvb2tpbmcgY2xvc2VyIGF0IHRoZSBjb2RlIGZvciBgZHNhX2xvb3BfZ2V0X3Byb3RvY29sYCwgaXQmIzM5O3MgaGFyZGNvZGVkIHRvIHJldHVybiBgRFNBX1RBR19QUk9UT19OT05FYC4gVGhhdCYjMzk7cyBhIGRlYWQgZW5kIHRoZXJlLgoKU28sIGlmIGBkc2FfbG9vcGAgaXNuJiMzOTt0IGdvaW5nIHRvIGJlIGhlbHBmdWwgZGlyZWN0bHksIHdoYXQgKm90aGVyKiBhdmVudWVzIGFyZSB0aGVyZSBmb3IgdGVzdGluZyBEU0EgdGFnZ2Vycz8gSSByZW1lbWJlciBgZHNhX2xvb3BfYmRpbmZvLmNgIHJlZ2lzdGVycyB0aG9zZSBmaXhlZCBQSFlzLiBBbnl0aGluZyB0aGVyZT8gIE1vcmUgZ2VuZXJhbGx5LCBpcyB0aGVyZSAqYW55KiBvdGhlciBkcml2ZXIgaW4gdGhlIERTQSBlY29zeXN0ZW0gdGhhdCBnaXZlcyB5b3UgdGhlIGFiaWxpdHkgdG8gKnNldCogdGhlIERTQSB0YWcgcHJvdG9jb2wsIG9yIGR5bmFtaWNhbGx5IGNoYW5nZSBpdD8KCk9rYXksIGJhY2sgdG8gYGRzYV9sb29wYC4gQ2FuIEkgY29uZmlndXJlIGl0IHRvIGJlIHNvbWV0aGluZyAqb3RoZXIqIHRoYW4gYERTQV9UQUdfUFJPVE9fTk9ORWA/IEl0IGtlZXBzIGNvbWluZyBiYWNrIHRvIHRoZSBmYWN0IHRoYXQgaXQgcmV0dXJucyBgRFNBX1RBR19QUk9UT19OT05FYC4gIFNvLCBob3cgY2FuIEkgZXZlbiBleHBsb3JlIHRoZSBgRFNBX1RBR19QUk9UT19ZVDkyMlhgIHRhZ2dlcj8gQWgsIHRoZSBgeXQ5MjJ4X25ldGRldl9vcHNgIGFyZSByZWdpc3RlcmVkIHZpYSBgRFNBX1RBR19EUklWRVJgLiBTbywgY2FuIEkgZHluYW1pY2FsbHkgKmNoYW5nZSogdGhlIHRhZyBwcm90b2NvbCBvZiBhIERTQSBzd2l0Y2g/IEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgc3lzZnMgb3IgTmV0bGluay4gU3VyZWx5IHRoZXJlIGlzIHNvbWUgbWV0aG9kIGxpa2UgYGRzYV9zd2l0Y2hfc2V0X3RhZ19wcm90b2NvbGAgc29tZXdoZXJlLiBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24sIGlzbiYjMzk7dCBpdD8gTGV0IG1lIGxvb2sgZm9yIGEgd2F5IHRvIGNoYW5nZSBpdCBkeW5hbWljYWxseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkc2FfdGFnX3Byb3RvY29sJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdD02MDY9U3dpdGNoIGNvbmZpZ3VyYXRpb25cbi0tXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3QtNjA5LS0gYGBnZXRfdGFnX3Byb3RvY29sYGA6IHRoaXMgaXMgdG8gaW5kaWNhdGUgd2hhdCBraW5kIG9mIHRhZ2dpbmcgcHJvdG9jb2wgaXNcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdDo2MTA6ICBzdXBwb3J0ZWQsIHNob3VsZCBiZSBhIHZhbGlkIHZhbHVlIGZyb20gdGhlIGBgZHNhX3RhZ19wcm90b2NvbGBgIGVudW0uXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3QtNjExLSAgVGhlIHJldHVybmVkIGluZm9ybWF0aW9uIGRvZXMgbm90IGhhdmUgdG8gYmUgc3RhdGljOyB0aGUgZHJpdmVyIGlzIHBhc3NlZCB0aGVcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYz0yNDc4PXN0YXRpYyBib29sIGI1M19jYW5fZW5hYmxlX2JyY21fdGFncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MjQ3OTpcdFx0XHRcdCAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHRhZ19wcm90b2NvbClcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTI0ODAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTI1MDMtXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzoyNTA0OmVudW0gZHNhX3RhZ19wcm90b2NvbCBiNTNfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MjUwNTpcdFx0XHRcdFx0ICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wcm90KVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmMtMjUwNi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTEzMz1zdHJ1Y3QgYjUzX2RldmljZSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oLTE1NC1cdHUxNiBudW1fYXJsX2J1Y2tldHM7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2Lmg6MTU1Olx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHRhZ19wcm90b2NvbDtcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC0xNTYtXG4tLVxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTU0Nz1pbnQgYjUzX21pcnJvcl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtNTQ5LVx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oOjU1MDplbnVtIGRzYV90YWdfcHJvdG9jb2wgYjUzX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDo1NTE6XHRcdFx0XHRcdCAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcHJvdCk7XG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtNTUyLXZvaWQgYjUzX21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz05Nz1zdGF0aWMgaW50IGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMjQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMjU6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBkc2FfbG9vcF9nZXRfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVx0XHRcdFx0XHRcdCAgIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTI3Olx0XHRcdFx0XHRcdCAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTEyOC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmM9MjI3PXN0YXRpYyB2b2lkIGhlbGxjcmVla19mZWF0dXJlX2RldGVjdChzdHJ1Y3QgaGVsbGNyZWVrICpoZWxsY3JlZWspXG4tLVxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmMtMjM5LVxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmM6MjQwOnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgaGVsbGNyZWVrX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmMtMjQxLVx0XHRcdFx0XHRcdFx0aW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvaGlyc2NobWFubi9oZWxsY3JlZWsuYzoyNDI6XHRcdFx0XHRcdFx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2EvaGlyc2NobWFubi9oZWxsY3JlZWsuYy0yNDMte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9rczg5OTUuYz01MzA9c3RhdGljIGVudW1cbmRyaXZlcnMvbmV0L2RzYS9rczg5OTUuYzo1MzE6ZHNhX3RhZ19wcm90b2NvbCBrczg5OTVfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2Eva3M4OTk1LmMtNTMyLVx0XHRcdFx0XHQgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2Eva3M4OTk1LmM6NTMzOlx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxuZHJpdmVycy9uZXQvZHNhL2tzODk5NS5jLTUzNC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jPTg2Nz1zdGF0aWMgaW50IGxhbjkzMDNfY2hlY2tfZGV2aWNlKHN0cnVjdCBsYW45MzAzICpjaGlwKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy05MzYtXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6OTM3OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbGFuOTMwM19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy05MzgtXHRcdFx0XHRcdFx0ICAgICAgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6OTM5Olx0XHRcdFx0XHRcdCAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy05NDAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwLmg9MjU1PXN0cnVjdCBnc3dpcF9od19pbmZvIHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcC5oLTI2Mi1cdHNpemVfdCBwY2VfbWljcm9jb2RlX3NpemU7XG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcC5oOjI2MzpcdGVudW0gZHNhX3RhZ19wcm90b2NvbCB0YWdfcHJvdG9jb2w7XG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcC5oLTI2NC1cdHZvaWQgKCpwaHlsaW5rX2dldF9jYXBzKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jPTc0Mj1zdGF0aWMgdm9pZCBnc3dpcF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmMtNzQ4LVxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM6NzQ5OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgZ3N3aXBfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy03NTAtXHRcdFx0XHRcdFx0ICAgIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM6NzUxOlx0XHRcdFx0XHRcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy03NTIte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jPTI5NzA9c3RhdGljIGludCBrc3o4X3N3aXRjaF9pbml0KHN0cnVjdCBrc3pfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk3OC1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5Nzk6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBrc3o4NDYzX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk4MC1cdFx0XHRcdFx0XHQgICAgICBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5ODE6XHRcdFx0XHRcdFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk4Mi17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9Mjk4Nj1zdGF0aWMgaW50IGtzejg0NjNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6Mjk4NzpcdFx0XHRcdFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk4OC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk5OS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMDA6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBrc3o4N3h4X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAwMS1cdFx0XHRcdFx0XHQgICAgICBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMDI6XHRcdFx0XHRcdFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAwMy17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzAwNz1zdGF0aWMgaW50IGtzejg3eHhfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzAwODpcdFx0XHRcdFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAwOS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAxNS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMTY6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBrc3o4OHh4X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAxNy1cdFx0XHRcdFx0XHQgICAgICBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMTg6XHRcdFx0XHRcdFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAxOS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzAyOD1zdGF0aWMgaW50IGtzejg4eHhfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM6MzAyOTpcdFx0XHRcdFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAzMC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9MTk3MD1zdGF0aWMgaW50IGtzejk0Nzdfc3dpdGNoX2luaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0xOTg5LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM6MTk5MDpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGtzejk0NzdfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0xOTkxLVx0XHRcdFx0XHRcdCAgICAgIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM6MTk5MjpcdFx0XHRcdFx0XHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0xOTkzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYz0yMDA0PXN0YXRpYyBpbnQga3N6OTQ3N19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzoyMDA1Olx0XHRcdFx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0yMDA2LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jPTc2OD1zdGF0aWMgaW50IGxhbjkzN3hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtOTA3LVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYzo5MDg6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBsYW45Mzd4X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy05MDktXHRcdFx0XHRcdFx0ICAgICAgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jOjkxMDpcdFx0XHRcdFx0XHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTkxMS17XG4tLVxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYz05MTU9c3RhdGljIGludCBsYW45Mzd4X2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM6OTE2Olx0XHRcdFx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTkxNy17XG4tLVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jPTIxNDY9c3RhdGljIHZvaWQgbXQ3NTN4X3BvcnRfbWlycm9yX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTY4LVxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jOjIxNjk6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbFxuZHJpdmVycy9uZXQvZHNhL210NzUzMC5jLTIxNzAtbXRrX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyMTcxOlx0XHQgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTcyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2MDYwLmM9Mjc9c3RhdGljIGNvbnN0IGNoYXIgKm12ODhlNjA2MF9nZXRfbmFtZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgc3dfYWRkcilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2MDYwLmMtNDQtXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2MDYwLmM6NDU6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtdjg4ZTYwNjBfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2MDYwLmMtNDYtXHRcdFx0XHRcdFx0XHRpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTYwNjAuYzo0NzpcdFx0XHRcdFx0XHRcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBtKVxuZHJpdmVycy9uZXQvZHNhL212ODhlNjA2MC5jLTQ4LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz02NjI3PXN0YXRpYyBzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKm12ODhlNnh4eF9hbGxvY19jaGlwKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjQ1LVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6NjY0NjpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIG12ODhlNnh4eF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTY2NDctXHRcdFx0XHRcdFx0XHRpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjY2NDg6XHRcdFx0XHRcdFx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTY2NDkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jPTY2NTU9c3RhdGljIGludCBtdjg4ZTZ4eHhfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzo2NjU2Olx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNjY1Ny17XG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjU4LVx0c3RydWN0IG12ODhlNnh4eF9jaGlwICpjaGlwID0gZHMtXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjY2NTk6XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgb2xkX3Byb3RvY29sO1xuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNjY2MC1cdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5oPTM0OT1zdHJ1Y3QgbXY4OGU2eHh4X2NoaXAge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5oLTM1Mi1cdC8qIEN1cnJlbnRseSBjb25maWd1cmVkIHRhZ2dpbmcgcHJvdG9jb2wgKi9cbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5oOjM1MzpcdGVudW0gZHNhX3RhZ19wcm90b2NvbCB0YWdfcHJvdG9jb2w7XG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuaC0zNTQtXG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM9MTU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbXhsODYyeHhfZXZsYW5fcnVsZV9kZXNjIHZpZF9hY2NlcHRfZWdyZXNzX3VuYXdhcmVbXSA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0xNjMtXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoxNjQ6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBteGw4NjJ4eF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTE2NS1cdFx0XHRcdFx0XHQgICAgICAgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoxNjY6XHRcdFx0XHRcdFx0ICAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtKVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMTY3LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz01Mj1zdGF0aWMgdm9pZCBuZXRjX2Rlc3Ryb3lfdmxhbl9saXN0KHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy02MC1cbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jOjYxOnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTYyLW5ldGNfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmM6NjM6XHRcdCAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcHJvdClcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTY0LXtcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9NzU0PXN0YXRpYyBpbnQgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6NzU1Olx0XHRcdFx0ICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtNzU2LXtcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtODAwLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjgwMTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGZlbGl4X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTgwMi1cdFx0XHRcdFx0XHQgICAgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6ODAzOlx0XHRcdFx0XHRcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtODA0LXtcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9MTY3OD1zdGF0aWMgaW50IGZlbGl4X2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzoxNjc5Olx0XHRcdFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTE2ODAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz0yMzkwPWludCBmZWxpeF9yZWdpc3Rlcl9zd2l0Y2goc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgc3dpdGNoX2Jhc2UsXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzOTItXHRcdFx0ICBib29sIG1tX3N1cHBvcnRlZCxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzoyMzkzOlx0XHRcdCAgZW51bSBkc2FfdGFnX3Byb3RvY29sIGluaXRfdGFnX3Byb3RvLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzOTQtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmVsaXhfaW5mbyAqaW5mbylcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4Lmg9ODc9c3RydWN0IGZlbGl4IHtcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmgtOTMtXHRyZXNvdXJjZV9zaXplX3RcdFx0XHRzd2l0Y2hfYmFzZTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguaDo5NDpcdGVudW0gZHNhX3RhZ19wcm90b2NvbFx0XHR0YWdfcHJvdG87XG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmgtOTUtXHRjb25zdCBzdHJ1Y3QgZmVsaXhfdGFnX3Byb3RvX29wcyAqdGFnX3Byb3RvX29wcztcbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4Lmg9MTAxPWludCBmZWxpeF9yZWdpc3Rlcl9zd2l0Y2goc3RydWN0IGRldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgc3dpdGNoX2Jhc2UsXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5oLTEwMy1cdFx0XHQgIGJvb2wgbW1fc3VwcG9ydGVkLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5oOjEwNDpcdFx0XHQgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBpbml0X3RhZ19wcm90byxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguaC0xMDUtXHRcdFx0ICBjb25zdCBzdHJ1Y3QgZmVsaXhfaW5mbyAqaW5mbyk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYz00ODU9c3RhdGljIHZvaWQgYXI5MzMxX3N3X3BvcnRfZGlzYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtNDk1LVxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzo0OTY6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBhcjkzMzFfc3dfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvcWNhL2FyOTMzMS5jLTQ5Ny1cdFx0XHRcdFx0XHRcdGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL3FjYS9hcjkzMzEuYzo0OTg6XHRcdFx0XHRcdFx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtNDk5LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYz0xNzM5PXN0YXRpYyB1MzIgcWNhOGtfZ2V0X3BoeV9mbGFncyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE3NTQtXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNzU1OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE3NTYtcWNhOGtfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTc1NzpcdFx0ICAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE3NTgte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTE3ODI9c3RhdGljIGludCBxY2E4a19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYzoxNzgzOlx0XHRcdFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTc4NC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYz0xMDQ0PXJ0bDgzNjVtYl9nZXRfcG9ydF9leHRpbnQoc3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdiwgaW50IHBvcnQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0xMDYyLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYzoxMDYzOnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMTA2NC1ydGw4MzY1bWJfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYzoxMDY1Olx0XHRcdCAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMTA2Ni17XG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYz0yOTIwPXN0YXRpYyBpbnQgcnRsODM2NW1iX2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYzoyOTIxOlx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0yOTIyLXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYz04NjY9c3RhdGljIGludCBydGw4MzY2cmJfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjZyYi5jLTExMjktXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYzoxMTMwOnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcnRsODM2Nl9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjZyYi5jLTExMzEtXHRcdFx0XHRcdFx0ICAgICAgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYzoxMTMyOlx0XHRcdFx0XHRcdCAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjZyYi5jLTExMzMte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM9ODE9c3RhdGljIHZvaWQgYTVwc3dfcmVnX3JtdyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBpbnQgb2Zmc2V0LCB1MzIgbWFzaywgdTMyIHZhbClcbi0tXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTk0LVxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzo5NTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGE1cHN3X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYy05Ni1cdFx0XHRcdFx0XHQgICAgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jOjk3Olx0XHRcdFx0XHRcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTk4LXtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1Lmg9MTE1PXN0cnVjdCBzamExMTA1X2luZm8ge1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0xMzYtXHRib29sIGZpeGVkX2Nic19tYXBwaW5nO1xuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oOjEzNzpcdGVudW0gZHNhX3RhZ19wcm90b2NvbCB0YWdfcHJvdG87XG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMTM4LVx0Y29uc3Qgc3RydWN0IHNqYTExMDVfZHluYW1pY190YWJsZV9vcHMgKmR5bl9vcHM7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM9MjI1OD1pbnQgc2phMTEwNV9zdGF0aWNfY29uZmlnX3JlbG9hZChzdHJ1Y3Qgc2phMTEwNV9wcml2YXRlICpwcml2LFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTIzNTQtXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYzoyMzU1OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTIzNTYtc2phMTEwNV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYzoyMzU3Olx0XHRcdCBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0yMzU4LXtcbi0tXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0yNjkxPXN0YXRpYyBpbnQgc2phMTEwNV9jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYzoyNjkyOlx0XHRcdFx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0yNjkzLXtcbi0tXG5kcml2ZXJzL25ldC9kc2Evdml0ZXNzZS12c2M3M3h4LWNvcmUuYz02NjI9c3RhdGljIGludCB2c2M3M3h4X3BoeV93cml0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwaHksIGludCByZWdudW0sXG4tLVxuZHJpdmVycy9uZXQvZHNhL3ZpdGVzc2UtdnNjNzN4eC1jb3JlLmMtNjg1LVxuZHJpdmVycy9uZXQvZHNhL3ZpdGVzc2UtdnNjNzN4eC1jb3JlLmM6Njg2OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgdnNjNzN4eF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmRyaXZlcnMvbmV0L2RzYS92aXRlc3NlLXZzYzczeHgtY29yZS5jLTY4Ny1cdFx0XHRcdFx0XHQgICAgICBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS92aXRlc3NlLXZzYzczeHgtY29yZS5jOjY4ODpcdFx0XHRcdFx0XHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXG5kcml2ZXJzL25ldC9kc2Evdml0ZXNzZS12c2M3M3h4LWNvcmUuYy02ODkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS94cnM3MDB4L3hyczcwMHguYz0xODU9c3RhdGljIGludCB4cnM3MDB4X3NldHVwX3JlZ21hcF9yYW5nZShzdHJ1Y3QgeHJzNzAweCAqcHJpdilcbi0tXG5kcml2ZXJzL25ldC9kc2EveHJzNzAweC94cnM3MDB4LmMtMjI1LVxuZHJpdmVycy9uZXQvZHNhL3hyczcwMHgveHJzNzAweC5jOjIyNjpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIHhyczcwMHhfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EveHJzNzAweC94cnM3MDB4LmMtMjI3LVx0XHRcdFx0XHRcdCAgICAgIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL3hyczcwMHgveHJzNzAweC5jOjIyODpcdFx0XHRcdFx0XHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcbmRyaXZlcnMvbmV0L2RzYS94cnM3MDB4L3hyczcwMHguYy0yMjkte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz00MjgwPXN0YXRpYyBpbnQgeXQ5MjF4X3BvcnRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcbi0tXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNDMyMC1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYzo0MzIxOnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy00MzIyLXl0OTIxeF9kc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjQzMjM6XHRcdFx0ICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtKVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTQzMjQte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYz01MzgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHl0OTIyeF9waHlsaW5rX21hY19vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTUzODYtXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM6NTM4NzpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNTM4OC15dDkyMnhfZHNhX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYzo1Mzg5Olx0XHRcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy01MzkwLXtcbi0tXG5pbmNsdWRlL25ldC9kc2EuaD0yNj1zdHJ1Y3QgdGNfYWN0aW9uO1xuLS1cbmluY2x1ZGUvbmV0L2RzYS5oLTY0LVxuaW5jbHVkZS9uZXQvZHNhLmg6NjU6ZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcbmluY2x1ZGUvbmV0L2RzYS5oLTY2LVx0RFNBX1RBR19QUk9UT19OT05FXHRcdD0gRFNBX1RBR19QUk9UT19OT05FX1ZBTFVFLFxuLS1cbmluY2x1ZGUvbmV0L2RzYS5oPTEwNj1zdHJ1Y3QgZHNhX2RldmljZV9vcHMge1xuLS1cbmluY2x1ZGUvbmV0L2RzYS5oLTExNS1cdGNvbnN0IGNoYXIgKm5hbWU7XG5pbmNsdWRlL25ldC9kc2EuaDoxMTY6XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG87XG5pbmNsdWRlL25ldC9kc2EuaC0xMTctXHQvKiBTb21lIHRhZ2dpbmcgcHJvdG9jb2xzIGVpdGhlciBtYW5nbGUgb3Igc2hpZnQgdGhlIGRlc3RpbmF0aW9uIE1BQ1xuLS1cbmluY2x1ZGUvbmV0L2RzYS5oPTEzMz1zdHJ1Y3QgZHNhX3N3aXRjaF90cmVlIHtcbi0tXG5pbmNsdWRlL25ldC9kc2EuaC0xNTgtXHQgKi9cbmluY2x1ZGUvbmV0L2RzYS5oOjE1OTpcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBkZWZhdWx0X3Byb3RvO1xuaW5jbHVkZS9uZXQvZHNhLmgtMTYwLVxuLS1cbmluY2x1ZGUvbmV0L2RzYS5oPTg2ND1zdHJ1Y3QgZHNhX3N3aXRjaF9vcHMge1xuLS1cbmluY2x1ZGUvbmV0L2RzYS5oLTg3MS1cdCAqL1xuaW5jbHVkZS9uZXQvZHNhLmg6ODcyOlx0ZW51bSBkc2FfdGFnX3Byb3RvY29sICgqZ2V0X3RhZ19wcm90b2NvbCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuaW5jbHVkZS9uZXQvZHNhLmgtODczLVx0XHRcdFx0XHRcdCAgaW50IHBvcnQsXG5pbmNsdWRlL25ldC9kc2EuaDo4NzQ6XHRcdFx0XHRcdFx0ICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXByb3QpO1xuaW5jbHVkZS9uZXQvZHNhLmgtODc1LVx0aW50XHQoKmNoYW5nZV90YWdfcHJvdG9jb2wpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmluY2x1ZGUvbmV0L2RzYS5oOjg3NjpcdFx0XHRcdCAgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pO1xuaW5jbHVkZS9uZXQvZHNhLmgtODc3LVx0Lypcbi0tXG5pbmNsdWRlL25ldC9kc2EuaC04ODItXHRpbnRcdCgqY29ubmVjdF90YWdfcHJvdG9jb2wpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbmluY2x1ZGUvbmV0L2RzYS5oOjg4MzpcdFx0XHRcdFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKTtcbmluY2x1ZGUvbmV0L2RzYS5oLTg4NC1cbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz0zNDA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zaG93KHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbm5ldC9kc2EvY29uZHVpdC5jLTM0Ni1cdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXCYjMzQ7JXNcXG5cJiMzNDssXG5uZXQvZHNhL2NvbmR1aXQuYzozNDc6XHRcdCAgICAgICBkc2FfdGFnX3Byb3RvY29sX3RvX3N0cihjcHVfZHAtXHUwMDNldGFnX29wcykpO1xubmV0L2RzYS9jb25kdWl0LmMtMzQ4LX1cbi0tXG5uZXQvZHNhL2NvbmR1aXQuYz00MTk9aW50IGRzYV9jb25kdWl0X3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwKVxuLS1cbm5ldC9kc2EvY29uZHVpdC5jLTQyNS1cbm5ldC9kc2EvY29uZHVpdC5jOjQyNjpcdG10dSA9IEVUSF9EQVRBX0xFTiAmIzQzOyBkc2FfdGFnX3Byb3RvY29sX292ZXJoZWFkKHRhZ19vcHMpO1xubmV0L2RzYS9jb25kdWl0LmMtNDI3LVxuLS1cbm5ldC9kc2EvZHNhLmM9MTEyMj1zdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX2RzYShzdHJ1Y3QgZHNhX3BvcnQgKmRwKVxuLS1cbm5ldC9kc2EvZHNhLmMtMTEyOC1cbm5ldC9kc2EvZHNhLmM6MTEyOTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2FfcG9ydCAqZHAsXG5uZXQvZHNhL2RzYS5jLTExMzAtXHRcdFx0XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdClcbm5ldC9kc2EvZHNhLmMtMTEzMS17XG5uZXQvZHNhL2RzYS5jOjExMzI6XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgdGFnX3Byb3RvY29sID0gRFNBX1RBR19QUk9UT19OT05FO1xubmV0L2RzYS9kc2EuYy0xMTMzLVx0c3RydWN0IGRzYV9zd2l0Y2ggKm1kcywgKmRzID0gZHAtXHUwMDNlZHM7XG4tLVxubmV0L2RzYS9kc2EuYz0xMTU1PXN0YXRpYyBpbnQgZHNhX3BvcnRfcGFyc2VfY3B1KHN0cnVjdCBkc2FfcG9ydCAqZHAsIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0LFxuLS1cbm5ldC9kc2EvZHNhLmMtMTE2MC1cdHN0cnVjdCBkc2Ffc3dpdGNoX3RyZWUgKmRzdCA9IGRzLVx1MDAzZWRzdDtcbm5ldC9kc2EvZHNhLmM6MTE2MTpcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBkZWZhdWx0X3Byb3RvO1xubmV0L2RzYS9kc2EuYy0xMTYyLVxuLS1cbm5ldC9kc2EvdGFnLmM9MTY4PUVYUE9SVF9TWU1CT0xfR1BMKGRzYV90YWdfZHJpdmVyc191bnJlZ2lzdGVyKTtcbm5ldC9kc2EvdGFnLmMtMTY5LVxubmV0L2RzYS90YWcuYzoxNzA6Y29uc3QgY2hhciAqZHNhX3RhZ19wcm90b2NvbF90b19zdHIoY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzICpvcHMpXG5uZXQvZHNhL3RhZy5jLTE3MS17XG4tLVxubmV0L2RzYS90YWcuaD0yND12b2lkIGRzYV90YWdfZHJpdmVyX3B1dChjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgKm9wcyk7XG5uZXQvZHNhL3RhZy5oOjI1OmNvbnN0IGNoYXIgKmRzYV90YWdfcHJvdG9jb2xfdG9fc3RyKGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyAqb3BzKTtcbm5ldC9kc2EvdGFnLmgtMjYtXG5uZXQvZHNhL3RhZy5oOjI3OnN0YXRpYyBpbmxpbmUgaW50IGRzYV90YWdfcHJvdG9jb2xfb3ZlcmhlYWQoY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzICpvcHMpXG5uZXQvZHNhL3RhZy5oLTI4LXtcbi0tXG5uZXQvZHNhL3VzZXIuYz0yMTAyPWludCBkc2FfdXNlcl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuLS1cbm5ldC9kc2EvdXNlci5jLTIxNDEtXG5uZXQvZHNhL3VzZXIuYzoyMTQyOlx0b3ZlcmhlYWQgPSBkc2FfdGFnX3Byb3RvY29sX292ZXJoZWFkKGNwdV9kcC1cdTAwM2V0YWdfb3BzKTtcbm5ldC9kc2EvdXNlci5jLTIxNDMtXHRtdHVfbGltaXQgPSBtaW5fdChpbnQsIGNvbmR1aXQtXHUwMDNlbWF4X210dSwgZGV2LVx1MDAzZW1heF9tdHUgJiM0Mzsgb3ZlcmhlYWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NzcwCgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBDb25kdWl0IFRhZ2dpbmcgRnVuY3Rpb25zKioKCkFscmlnaHQsIHNvIEkmIzM5O20gcG9raW5nIGFyb3VuZCBpbiBgbmV0L2RzYS9jb25kdWl0LmNgIGFuZCBzZWUgdGhlc2UgZnVuY3Rpb25zLCBgdGFnZ2luZ19zaG93YCBhbmQgYHRhZ2dpbmdfc3RvcmVgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7SG1tLCBzb3VuZHMgbGlrZSB0aGlzIG1pZ2h0IGJlIHdoZXJlIHRoZSBjb25kdWl0IHRhZ2dpbmcgY29uZmlndXJhdGlvbiBsaXZlcy4mIzM0OyBCdXQgSSBjYW4mIzM5O3QganVzdCBhc3N1bWUgYW55dGhpbmcsIHNvIEkgc2hvdWxkIHNlZSBpZiBgdGFnZ2luZ19zdG9yZWAgYWN0dWFsbHkgZXhpc3RzIGFzIGEgZnVuY3Rpb24uIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjb25maXJtIHRoYXQgaXQmIzM5O3MgZGVmaW5lZCBiZWZvcmUgSSB0cnkgdG8gaW50ZXJwcmV0IHRoZSBjb250ZXh0LCBvciBiZWZvcmUgSSBnbyBwb2tpbmcgYXJvdW5kIGluIHRoZSBmdW5jdGlvbiYjMzk7cyBjb2RlLiBHb3R0YSBiZSBtZXRob2RpY2FsIGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFnZ2luZ19zdG9yZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL2NvbmR1aXQuYz0zNDA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zaG93KHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuLS1cbm5ldC9kc2EvY29uZHVpdC5jLTM0OS1cbm5ldC9kc2EvY29uZHVpdC5jOjM1MDpzdGF0aWMgc3NpemVfdCB0YWdnaW5nX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxubmV0L2RzYS9jb25kdWl0LmMtMzUxLVx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDAxMDgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMTc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIFRhZyBQcm90b2NvbDogQSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGR5bmFtaWNhbGx5IGNoYW5naW5nIHRoZSB0YWcgcHJvdG9jb2wgb2YgYSBEU0Egc3dpdGNoLCBzcGVjaWZpY2FsbHkgdGhlIGBEU0FfVEFHX1BST1RPX1lUOTIyWGAgcHJvdG9jb2wsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdnVsbmVyYWJpbGl0eSBzcGFjZS4gSSBzZWUgdGhhdCB0aGUgYHRhZ2dpbmdfc3RvcmVgIHN5c2ZzIGVudHJ5IGluIGBuZXQvZHNhL2NvbmR1aXQuY2AgYWxsb3dzIGR5bmFtaWMgY2hhbmdlcywgd2hpY2ggaXMgZ3JlYXQsIGJ1dCBpdCYjMzk7cyBub3QgdGhlIGZ1bGwgc3RvcnkuIFRoaXMgZW50cnkgY2FsbHMgYGRzYV9zd2l0Y2hfY2hhbmdlX3RhZ19wcm90b2NvbGAsIHdoaWNoLCBpbiB0dXJuLCBjYWxscyBgZHMtJmd0O29wcy0mZ3Q7Y2hhbmdlX3RhZ19wcm90b2NvbGAuIFRoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZC4gSWYgdGhlIHN3aXRjaCBkcml2ZXIgZG9lc24mIzM5O3QgaW1wbGVtZW50IGBjaGFuZ2VfdGFnX3Byb3RvY29sYCwgdGhlIGF0dGVtcHQgdG8gY2hhbmdlIHRoZSB0YWcgcHJvdG9jb2wgd2lsbCBmYWlsLgoKVGhlIGltbWVkaWF0ZSBwcm9ibGVtIGlzIHRoYXQgYGRzYV9sb29wYCwgd2hpY2ggaXMgYSBjb21tb25seSB1c2VkIG1vY2sgZHJpdmVyLCAqZG9lc24mIzM5O3QqIGltcGxlbWVudCBgY2hhbmdlX3RhZ19wcm90b2NvbGAuIFNvLCBzdHJhaWdodGZvcndhcmQgbW9kaWZpY2F0aW9uIG9mIGl0cyBwcm90b2NvbCBpcyBvdXQuIE1vZGlmeWluZyB0aGUgYGRzYV9sb29wYCBkcml2ZXIgaXRzZWxmIGlzIGEgbm9uLXN0YXJ0ZXIuIEkgbmVlZCB0byBmaW5kIGFub3RoZXIgRFNBIHN3aXRjaCBkcml2ZXIgdGhhdCBJICpjYW4qIGFjdHVhbGx5IGluc3RhbnRpYXRlIHdpdGhpbiBteSB0ZXN0aW5nIGVudmlyb25tZW50LgoKSSYjMzk7bSB3b3JraW5nIGluIGEgc3RhbmRhcmQgeDg2XzY0IFFFTVUgZW52aXJvbm1lbnQsIG5vdCBzb21lIHNwZWNpYWxpemVkIGBzYW5kYm94YCBhcmNoaXRlY3R1cmUsIHdoaWNoIGxpbWl0cyBteSBvcHRpb25zLiBJJiMzOTttIGhpdHRpbmcgYSByb2FkYmxvY2suIENhbiBJIHNvbWVob3cgaW5zdGFudGlhdGUgYSBEU0Egc3dpdGNoIHRoYXQgKnVzZXMqIGBEU0FfVEFHX1BST1RPX1lUOTIyWGA/IFRoZSBkcml2ZXIgYXNzb2NpYXRlZCB3aXRoIHRoYXQgaXMgYHl0OTIxeC5jYCwgYSBkcml2ZXIgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1L1lUOTIyNCBzd2l0Y2ggY2hpcHMuIENydWNpYWxseSwgaXQmIzM5O3MgYW4gTURJTyBkZXZpY2UgZHJpdmVyLgoKQ2FuIEkgaW5zdGFudGlhdGUgYW4gTURJTyBkZXZpY2UgdmlhIHN5c2ZzPyBJIGtub3cgSTJDIGFuZCBTUEkgaGF2ZSBzb21lIG1lY2hhbmlzbXMsIGJ1dCBNRElPIGRvZXNuJiMzOTt0IHNlZW0gdG8gaGF2ZSBhIGdlbmVyaWMgYG5ld19kZXZpY2VgIGF0dHJpYnV0ZS4gSXMgdGhlcmUgYSBiYWNrZG9vcj8gSSByZWNhbGwgc29tZXRoaW5nIGFib3V0IGluamVjdGluZyBNRElPIGRldmljZXMgdXNpbmcgc29tZXRoaW5nIGxpa2UgYG1kaW8tbW9ja2Agb3IgYG1kaW8tZ3Bpb2AsIGJ1dCBzeXprYWxsZXIgZG9lc24mIzM5O3Qgc2VlbSB0byBoYXZlIGEgZGlyZWN0IG1lYW5zIHRvIGNyZWF0ZSBhcmJpdHJhcnkgTURJTyBkZXZpY2VzLCB1bmxlc3MgdGhlcmUmIzM5O3MgYSBzcGVjaWZpYyBmdXp6ZXIgc2V0dXAuCgpUaGUgYGRzYV9sb29wYCBkcml2ZXIgaXMgaW5zdGFudGlhdGVkIHRocm91Z2ggYGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldmAsIHdoaWNoIHJlZ2lzdGVycyBhICpmaXhlZCogTURJTyBkZXZpY2UuIE5vIGx1Y2sgdGhlcmUuIFdoYXQgYWJvdXQgbG9hZGluZyB0aGUgYHl0OTJ4eF9tZGlvX2RyaXZlcmAgZGlyZWN0bHk/CgpMb29raW5nIGF0IHRoZSBkcml2ZXImIzM5O3MgZGV2aWNlIG1hdGNoIHRhYmxlOgpgYGBjCnN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHl0OTJ4eF9vZl9tYXRjaFtdID0gewoJewoJCS5jb21wYXRpYmxlID0gJiMzNDttb3RvcmNvbW0seXQ5MjE1JiMzNDssCgkJLmRhdGEgPSAmYW1wO3l0OTJ4eF9jaGlwX2luZm9fdGFibGVbWVQ5MjE1XSwKCX0sCgl7CgkJLmNvbXBhdGlibGUgPSAmIzM0O21vdG9yY29tbSx5dDkyMjQmIzM0OywKCQkuZGF0YSA9ICZhbXA7eXQ5Mnh4X2NoaXBfaW5mb190YWJsZVtZVDkyMjRdLAoJfSwKCXt9Cn07CmBgYApUaGlzIGlzIGEgZGV2aWNlLXRyZWUgZHJpdmVuIGRyaXZlci4gV2l0aG91dCBEZXZpY2UgVHJlZSwgYG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpYCB3aWxsIHJldHVybiBOVUxMLCBhbmQgdGhlIHByb2JlIHdpbGwgZmFpbCB3aXRoIGAtRUlOVkFMYC4gVGhlIGRyaXZlciB1c2VzIHRoZSBmb2xsb3dpbmcgY29kZToKYGBgYwoJY29tcGF0X2luZm8gPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2KTsKCWlmICghY29tcGF0X2luZm8pCgkJcmV0dXJuIC1FSU5WQUw7CmBgYApFdmVuIGlmIEkgKmNvdWxkKiBzb21laG93IGJpbmQgdGhpcyBkcml2ZXIgdG8gYW4gTURJTyBkZXZpY2UgKHRocm91Z2gsIHNheSwgYSBgYmluZGAgc3lzZnMgb3BlcmF0aW9uKSwgaXQgd291bGQgZmFpbCBiZWNhdXNlIHRoZSBuZWNlc3NhcnkgYG9mX25vZGVgIHdpdGggdGhlIG1hdGNoaW5nIGNvbXBhdGlibGUgc3RyaW5nICgmIzM0O21vdG9yY29tbSx5dDkyMTUmIzM0OyBvciAmIzM0O21vdG9yY29tbSx5dDkyMjQmIzM0Oykgd291bGQgYmUgYWJzZW50IGluIG15IHN0YW5kYXJkIFFFTVUgc2V0dXAuIFRoZSBwcm9iZSAqd2lsbCogYWx3YXlzIGZhaWwgaW4gYSBub24tRGV2aWNlIFRyZWUgZW52aXJvbm1lbnQuCgpXaGF0IGlmIEkmIzM5O20gcnVubmluZyBzeXprYWxsZXIgb24gYW4gQVJNNjQgUUVNVSB3aXRoIGEgZGV2aWNlIHRyZWU/IFN5emthbGxlciAqZG9lcyogcnVuIG9uIEFSTTY0LCBidXQgaXQgZG9lc24mIzM5O3QgZHluYW1pY2FsbHkgZ2VuZXJhdGUgRFQgbm9kZXMgZm9yIGFyYml0cmFyeSBkcml2ZXJzLiBJdCB1c2VzIGEgZml4ZWQgRGV2aWNlIFRyZWUgcHJvdmlkZWQgd2l0aCB0aGUgc3l6a2FsbGVyIGltYWdlLiBTbywgdW5sZXNzIHRoZSBEZXZpY2UgVHJlZSBzcGVjaWZpY2FsbHkgaW5jbHVkZXMgZWl0aGVyICYjMzQ7bW90b3Jjb21tLHl0OTIxNSYjMzQ7IG9yICYjMzQ7bW90b3Jjb21tLHl0OTIyNCYjMzQ7IGVudHJpZXMsIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUsIHdoaWNoIGlzIGFsbW9zdCBjZXJ0YWlubHkgbm90IHRoZSBjYXNlIGZvciBnZW5lcmljIGltYWdlcy4gVW5mb3J0dW5hdGVseSwgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBgc3l6X2RldmxpbmtgIHBzZXVkby1zeXNjYWxsIHRoYXQgY291bGQgY3JlYXRlIGFuIE1ESU8gZGV2aWNlIGVpdGhlci4gRGV2bGluayBpcyBmb3IgZGV2bGluayBkZXZpY2VzIG9ubHkuCgpJIGhhdmUgdG8gY29uc2lkZXIgaWYgdGhlIHRhZyBkcml2ZXIsIHNwZWNpZmljYWxseSBgdGFnX3l0OTIxeC5jYCwgaXMgcmVhY2hhYmxlIGluIGFueSBvdGhlciB3YXkuIEl0JiMzOTtzIHJlZ2lzdGVyZWQgdmlhIGBtb2R1bGVfZHNhX3RhZ19kcml2ZXJzKGRzYV90YWdfZHJpdmVyX2FycmF5KWAgYW5kIHJlZ2lzdGVycyBgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XFwuY2hhbmdlX3RhZ19wcm90b2NvbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz03MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXY4OGU2eHh4X3N3aXRjaF9vcHMgPSB7XG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy03MTg4LVx0LmdldF90YWdfcHJvdG9jb2xcdD0gbXY4OGU2eHh4X2dldF90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYzo3MTg5Olx0LmNoYW5nZV90YWdfcHJvdG9jb2xcdD0gbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy03MTkwLVx0LnNldHVwXHRcdFx0PSBtdjg4ZTZ4eHhfc2V0dXAsXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTIzMDY9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBmZWxpeF9zd2l0Y2hfb3BzID0ge1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzMDctXHQuZ2V0X3RhZ19wcm90b2NvbFx0XHQ9IGZlbGl4X2dldF90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6MjMwODpcdC5jaGFuZ2VfdGFnX3Byb3RvY29sXHRcdD0gZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0yMzA5LVx0LmNvbm5lY3RfdGFnX3Byb3RvY29sXHRcdD0gZmVsaXhfY29ubmVjdF90YWdfcHJvdG9jb2wsXG4tLVxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYz0zMjg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgcnRsODM2NW1iX3N3aXRjaF9vcHMgPSB7XG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jLTMyODYtXHQuZ2V0X3RhZ19wcm90b2NvbCA9IHJ0bDgzNjVtYl9nZXRfdGFnX3Byb3RvY29sLFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYzozMjg3Olx0LmNoYW5nZV90YWdfcHJvdG9jb2wgPSBydGw4MzY1bWJfY2hhbmdlX3RhZ19wcm90b2NvbCxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMzI4OC1cdC5zZXR1cCA9IHJ0bDgzNjVtYl9zZXR1cCxcbi0tXG5uZXQvZHNhL2RzYS5jPTExNTU9c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV9jcHUoc3RydWN0IGRzYV9wb3J0ICpkcCwgc3RydWN0IG5ldF9kZXZpY2UgKmNvbmR1aXQsXG4tLVxubmV0L2RzYS9kc2EuYy0xMjMwLVx0ICogZHNhX3N3aXRjaF9zZXR1cF90YWdfcHJvdG9jb2wgb25jZSAuc2V0dXAgaGFzIHJ1biBhbmQgdGhlXG5uZXQvZHNhL2RzYS5jOjEyMzE6XHQgKiBkcml2ZXIgaXMgcmVhZHkgdG8gYWNjZXB0IGNhbGxzIHRvIC5jaGFuZ2VfdGFnX3Byb3RvY29sLiBJZlxubmV0L2RzYS9kc2EuYy0xMjMyLVx0ICogdGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjdXN0b20gcHJvdG9jb2wgYXQgdGhhdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzAwNwoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBjaGFuZ2VfdGFnX3Byb3RvY29sYCBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlIGRyaXZlcnMgdGhhdCBhY3R1YWxseSBoYW5kbGUgdGhlIGBjaGFuZ2VfdGFnX3Byb3RvY29sYCBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGBtdjg4ZTZ4eHhgLCBgZmVsaXhgLCBhbmQgYHJ0bDgzNjVtYmAgbGlzdGVkLiBNeSBmaXJzdCBxdWVzdGlvbiBpcywgY2FuIGFueSBvZiB0aGVzZSBiZSBlZmZlY3RpdmVseSB0ZXN0ZWQgb3IgZXhwZXJpbWVudGVkIHdpdGggaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50PyBJdCB3b3VsZCBtYWtlIGRlYnVnZ2luZyBhbmQgZGV2ZWxvcG1lbnQgYSBsb3QgZWFzaWVyLgoKTm93LCBJIHJlY2FsbCBgbXY4OGU2eHh4YCBpcyBhbiBNRElPIGRyaXZlci4gVGhhdCBmZWVscyBtYW5hZ2VhYmxlIGluIGEgdmlydHVhbCBzZXR1cCwgcG90ZW50aWFsbHkgdGhyb3VnaCBlbXVsYXRpb24gb2YgYW4gTURJTyBidXMuIEhvd2V2ZXIsIGBmZWxpeGDigKYgdGhhdCYjMzk7cyBhbiBpbnRlcmVzdGluZyBjYXNlLiBJIHZhZ3VlbHkgcmVtZW1iZXIgaXQgYmVpbmcgYSBQQ0kgZHJpdmVyLCBzcGVjaWZpY2FsbHkgZm9yIHRoZSBOWFAgVlNDOTk1OS4gQnV0IGhvbGQgb24sIGxldCBtZSBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0LiBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCAqaXMqIGEgUENJIGRyaXZlciB0byB1bmRlcnN0YW5kIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50IGltcGxpY2F0aW9ucy4gTGV0IG1lIHRha2UgYSBxdWljayBwZWVrIGF0IGBmZWxpeF92c2M5OTU5LmNgIGFuZCBjb25maXJtIG15IGFzc3VtcHRpb25zLiBUaGF0IHdpbGwgYmUgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBiZXN0IHRvIGRldmVsb3AgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmVsaXhfdnNjOTk1OSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2Evb2NlbG90L01ha2VmaWxlPTc9bXNjY19mZWxpeF9kc2FfbGliLW9ianMgOj0gZmVsaXgub1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9NYWtlZmlsZTo4Om1zY2NfZmVsaXgtb2JqcyA6PSBmZWxpeF92c2M5OTU5Lm9cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvTWFrZWZpbGUtOS1tc2NjX29jZWxvdF9leHQtb2JqcyA6PSBvY2Vsb3RfZXh0Lm9cbi0tXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0yNzQ1PU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBmZWxpeF9pZHMpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjc0Ni1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jOjI3NDc6c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGZlbGl4X3ZzYzk5NTlfcGNpX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTI3NDgtXHQubmFtZVx0XHQ9IFwmIzM0O21zY2NfZmVsaXhcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjc1My19O1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6Mjc1NDptb2R1bGVfcGNpX2RyaXZlcihmZWxpeF92c2M5OTU5X3BjaV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjc1NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM3NzUKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb25zaWRlcmluZyBEcml2ZXIgQ29tcGF0aWJpbGl0eSBhbmQgUG90ZW50aWFsIFByb3RvY29sIE1hbmlwdWxhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGZlbGl4X3ZzYzk5NTlgLiBSaWdodCwgaXQgKmlzKiBhIFBDSSBkcml2ZXIsIGJ1dCB0aGUgcHJvYmxlbSBpcyBpdCYjMzk7cyB0aWVkIHNwZWNpZmljYWxseSB0byB0aGUgTlhQIFZTQzk5NTkgZGV2aWNlLCBhbmQgdGhhdCYjMzk7cyBub3Qgc29tZXRoaW5nIHlvdSYjMzk7bGwgZmluZCBlbXVsYXRlZCBpbiBhIHR5cGljYWwgUUVNVSBzZXR1cC4gVGhhdCYjMzk7cyBhIGRlZmluaXRlIHJvYWRibG9jay4gSG1t4oCmIHdoYXQgYWJvdXQgYHJ0bDgzNjVtYmA/IEl04oCZcyBhbiBNRElPIGRyaXZlciwgcG90ZW50aWFsbHkgb2ZmZXJpbmcgYSBkaWZmZXJlbnQgYXZlbnVlLgoKTm93LCBob2xkIG9uLiBBIHRob3VnaHQgaXMgZW1lcmdpbmcuIENhbiB3ZSBtYW5pcHVsYXRlIHRoZSB0YWdnaW5nIHByb3RvY29sIG9uIGEgc3dpdGNoPyBQZXJoYXBzLCBzb21laG93LCB3ZSBjb3VsZCBjaGFuZ2UgaXQgdG8gYW4gYXJiaXRyYXJ5IG9uZT8gVGhhdCBjb3VsZCBvcGVuIHNvbWUgaW50ZXJlc3RpbmcgZG9vcnMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gYGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2xgIHRvIHVuZGVyc3RhbmQgdGhpcyBkaXJlY3Rpb24gZnVydGhlci4gVGhhdCBtaWdodCBwcm92aWRlIHRoZSBhbnN3ZXIgSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9NzMyPWZlbGl4X3RhZ19wcm90b19zZXR1cF9zaGFyZWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy03NTMtICovXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6NzU0OnN0YXRpYyBpbnQgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtNzU1LVx0XHRcdFx0ICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTE2OTY9c3RhdGljIGludCBmZWxpeF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTE3NTEtXHQgKi9cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzoxNzUyOlx0ZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbChkcywgZmVsaXgtXHUwMDNldGFnX3Byb3RvKTtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0xNzUzLVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz0yMzA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZmVsaXhfc3dpdGNoX29wcyA9IHtcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0yMzA3LVx0LmdldF90YWdfcHJvdG9jb2xcdFx0PSBmZWxpeF9nZXRfdGFnX3Byb3RvY29sLFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjIzMDg6XHQuY2hhbmdlX3RhZ19wcm90b2NvbFx0XHQ9IGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2wsXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwOS1cdC5jb25uZWN0X3RhZ19wcm90b2NvbFx0XHQ9IGZlbGl4X2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDUyOAoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbGAgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2xgLiBNeSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdoYXQmIzM5O3MgaXRzIGludGVuZGVkIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIEZlbGl4IGVjb3N5c3RlbT8gSXMgaXQgYSBjb3JlIGZ1bmN0aW9uLCBhIHV0aWxpdHksIG9yIHNvbWV0aGluZyBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgdXNlIGNhc2Ugb3IgY29tcG9uZW50PyBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIGFuZCBjb250ZXh0LgoKR2l2ZW4gdGhlIG5hbWUsICYjMzQ7Y2hhbmdlX3RhZ19wcm90b2NvbCYjMzQ7LCBJJiMzOTttIGJldHRpbmcgdGhpcyBpcyByZWxhdGVkIHRvIGhvdyBGZWxpeCBoYW5kbGVzIHRhZ2dpbmcuIFBlcmhhcHMgaXQmIzM5O3MgaW52b2x2ZWQgaW4gbW9kaWZ5aW5nIHRoZSBwcm90b2NvbCB1c2VkIGZvciBjb21tdW5pY2F0aW9uIG9mIHRhZ3MgYmV0d2VlbiBlbmRwb2ludHMsIG9yIG1heWJlIGl0JiMzOTtzIHJlbGF0ZWQgdG8gaG93IHRhZ3MgdGhlbXNlbHZlcyBhcmUgZW5jb2RlZCBvciBpbnRlcnByZXRlZC4gVGhlIHRlcm0gJiMzNDtwcm90b2NvbCYjMzQ7IG1ha2VzIG1lIHRoaW5rIG9mIHVuZGVybHlpbmcgbmV0d29yayBjb21tdW5pY2F0aW9ucyBvciBzZXJpYWxpemF0aW9uIGZvcm1hdHMuIEkmIzM5O20gd29uZGVyaW5nIGlmIHRoaXMgaXMgYWJvdXQgc3dpdGNoaW5nIGJldHdlZW4gSVAgc2V0cywgSVAgdGFibGVzLCBlQlBGLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseSBmb3IgdGFnIGVuZm9yY2VtZW50LgoKSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLCBhbnkgZG9jdW1lbnRhdGlvbiwgYW5kIGhvcGVmdWxseSwgcmVsZXZhbnQgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbiBpbiB0aGUgY29kZWJhc2UuIFVuZGVyc3RhbmRpbmcgdGhlIGlucHV0cyBhbmQgb3V0cHV0cywgYXMgd2VsbCBhcyBhbnkgc2lkZSBlZmZlY3RzLCB3aWxsIGJlIGNydWNpYWwuIEkmIzM5O20gaW50ZXJlc3RlZCBpbiB0aGUgZXJyb3IgaGFuZGxpbmcg4oCTIGhvdyBkb2VzIGl0IGRlYWwgd2l0aCBpbnZhbGlkIG9yIGNvbmZsaWN0aW5nIGlucHV0cz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIEkgbmVlZCB0byB3b3JyeSBhYm91dD8gRG9lcyB0aGlzIGZ1bmN0aW9uIGhhdmUgYW55IGltcGFjdCBvbiBkYXRhIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgZGlzdHJpYnV0ZWQgc3lzdGVtPwoKVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBncmFzcCB0aGUgY29yZSBsb2dpYyBvZiBgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbGAgYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIHN0YWJpbGl0eSBvZiB0aGUgRmVsaXggZGVwbG95bWVudC4gSSBleHBlY3QgYSBjYXJlZnVsIGluc3BlY3Rpb24gd2lsbCBiZSBuZWVkZWQgdG8gdHJ1bHkgdW5kZXJzdGFuZCBob3cgaXQgZnVuY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xNCAwMjoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc1NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzU0Olx0c3RhdGljIGludCBmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiA3NTU6XHRcdFx0XHRcdCAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuIDc1NjpcdHtcbiA3NTc6XHRcdGNvbnN0IHN0cnVjdCBmZWxpeF90YWdfcHJvdG9fb3BzICpvbGRfcHJvdG9fb3BzLCAqcHJvdG9fb3BzO1xuIDc1ODpcdFx0c3RydWN0IG9jZWxvdCAqb2NlbG90ID0gZHMtXHUwMDNlcHJpdjtcbiA3NTk6XHRcdHN0cnVjdCBmZWxpeCAqZmVsaXggPSBvY2Vsb3RfdG9fZmVsaXgob2NlbG90KTtcbiA3NjA6XHRcdGludCBlcnI7XG4gNzYxOlx0XG4gNzYyOlx0XHRzd2l0Y2ggKHByb3RvKSB7XG4gNzYzOlx0XHRjYXNlIERTQV9UQUdfUFJPVE9fU0VWSUxMRTpcbiA3NjQ6XHRcdGNhc2UgRFNBX1RBR19QUk9UT19PQ0VMT1Q6XG4gNzY1Olx0XHRcdHByb3RvX29wcyA9IFx1MDAyNmZlbGl4X3RhZ19ucGlfcHJvdG9fb3BzO1xuIDc2NjpcdFx0XHRicmVhaztcbiA3Njc6XHRcdGNhc2UgRFNBX1RBR19QUk9UT19PQ0VMT1RfODAyMVE6XG4gNzY4Olx0XHRcdHByb3RvX29wcyA9IFx1MDAyNmZlbGl4X3RhZ184MDIxcV9wcm90b19vcHM7XG4gNzY5Olx0XHRcdGJyZWFrO1xuIDc3MDpcdFx0ZGVmYXVsdDpcbiA3NzE6XHRcdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4gNzcyOlx0XHR9XG4gNzczOlx0XG4gNzc0Olx0XHRvbGRfcHJvdG9fb3BzID0gZmVsaXgtXHUwMDNldGFnX3Byb3RvX29wcztcbiA3NzU6XHRcbiA3NzY6XHRcdGlmIChwcm90b19vcHMgPT0gb2xkX3Byb3RvX29wcylcbiA3Nzc6XHRcdFx0cmV0dXJuIDA7XG4gNzc4Olx0XG4gNzc5Olx0XHRlcnIgPSBwcm90b19vcHMtXHUwMDNlc2V0dXAoZHMpO1xuIDc4MDpcdFx0aWYgKGVycilcbiA3ODE6XHRcdFx0Z290byBzZXR1cF9mYWlsZWQ7XG4gNzgyOlx0XG4gNzgzOlx0XHRlcnIgPSBmZWxpeF90YWdfcHJvdG9fc2V0dXBfc2hhcmVkKGRzLCBwcm90b19vcHMsIG9sZF9wcm90b19vcHMpO1xuIDc4NDpcdFx0aWYgKGVycilcbiA3ODU6XHRcdFx0Z290byBzZXR1cF9zaGFyZWRfZmFpbGVkO1xuIDc4NjpcdFxuIDc4NzpcdFx0aWYgKG9sZF9wcm90b19vcHMpXG4gNzg4Olx0XHRcdG9sZF9wcm90b19vcHMtXHUwMDNldGVhcmRvd24oZHMpO1xuIDc4OTpcdFxuIDc5MDpcdFx0ZmVsaXgtXHUwMDNldGFnX3Byb3RvX29wcyA9IHByb3RvX29wcztcbiA3OTE6XHRcdGZlbGl4LVx1MDAzZXRhZ19wcm90byA9IHByb3RvO1xuIDc5MjpcdFxuIDc5MzpcdFx0cmV0dXJuIDA7XG4gNzk0Olx0XG4gNzk1Olx0c2V0dXBfc2hhcmVkX2ZhaWxlZDpcbiA3OTY6XHRcdHByb3RvX29wcy1cdTAwM2V0ZWFyZG93bihkcyk7XG4gNzk3Olx0c2V0dXBfZmFpbGVkOlxuIDc5ODpcdFx0cmV0dXJuIGVycjtcbiA3OTk6XHR9XG4gODAwOlx0XG4gODAxOlx0c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBmZWxpeF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiA4MDI6XHRcdFx0XHRcdFx0XHQgICAgaW50IHBvcnQsXG4gODAzOlx0XHRcdFx0XHRcdFx0ICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU2NzUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOgoKKipNeSBJbW1lZGlhdGUgQXNzZXNzbWVudCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBhbmQgaXQmIzM5O3MgY2xlYXIgdGhlIHN5c3RlbSYjMzk7cyBjdXJyZW50IHN1cHBvcnQgaXMgcHJldHR5IGxpbWl0ZWQuIEl0IHNlZW1zIHRvIG9ubHkgcmVjb2duaXplIHRoZXNlIERTQSBwcm90b2NvbHM6IGBEU0FfVEFHX1BST1RPX1NFVklMTEVgLCBgRFNBX1RBR19QUk9UT19PQ0VMT1RgLCBhbmQgYERTQV9UQUdfUFJPVE9fT0NFTE9UXzgwMjFRYC4gVGhhdCYjMzk7cyBhIGRlY2VudCBzdGFydCwgYnV0IGltbWVkaWF0ZWx5IG15IG1pbmQganVtcHMgdG8gdGhlIGJpZ2dlciBwaWN0dXJlIGFuZCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgSSBrbm93IHdlIG5lZWQgdG8gYWRkcmVzcy4gV2hhdCBhYm91dCBzdXBwb3J0IGZvciB0aGUgYG12ODhlNnh4eGAgZmFtaWx5PyBJdCYjMzk7cyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiBtYW55IG9mIG91ciBhcHBsaWNhdGlvbnMuIEFyZSB3ZSBuZWdsZWN0aW5nIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZSwgb3IgaXMgdGhpcyBqdXN0IHRoZSBzdGFydGluZyBwb2ludD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhpcyBpcyBhbiBvdmVyc2lnaHQsIGEgZGVsaWJlcmF0ZSBjaG9pY2UsIG9yIGlmIHN1cHBvcnQgaXMgcGxhbm5lZCBmb3IgdGhpcyBicm9hZGVyIHJhbmdlIG9mIE1hcnZlbGwgc3dpdGNoZXMuIFRoaXMgZGV0YWlsIGlzIGNydWNpYWwgZm9yIGFzc2Vzc2luZyB0aGUgc3lzdGVtJiMzOTtzIHByYWN0aWNhbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY2NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NjY1NTpcdHN0YXRpYyBpbnQgbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuNjY1NjpcdFx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuNjY1NzpcdHtcbjY2NTg6XHRcdHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcCA9IGRzLVx1MDAzZXByaXY7XG42NjU5Olx0XHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgb2xkX3Byb3RvY29sO1xuNjY2MDpcdFx0c3RydWN0IGRzYV9wb3J0ICpjcHVfZHA7XG42NjYxOlx0XHRpbnQgZXJyO1xuNjY2MjpcdFxuNjY2MzpcdFx0c3dpdGNoIChwcm90bykge1xuNjY2NDpcdFx0Y2FzZSBEU0FfVEFHX1BST1RPX0VEU0E6XG42NjY1Olx0XHRcdHN3aXRjaCAoY2hpcC1cdTAwM2VpbmZvLVx1MDAzZWVkc2Ffc3VwcG9ydCkge1xuNjY2NjpcdFx0XHRjYXNlIE1WODhFNlhYWF9FRFNBX1VOU1VQUE9SVEVEOlxuNjY2NzpcdFx0XHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuNjY2ODpcdFx0XHRjYXNlIE1WODhFNlhYWF9FRFNBX1VORE9DVU1FTlRFRDpcbjY2Njk6XHRcdFx0XHRkZXZfd2FybihjaGlwLVx1MDAzZWRldiwgXCYjMzQ7UmVseWluZyBvbiB1bmRvY3VtZW50ZWQgRURTQSB0YWdnaW5nIGJlaGF2aW9yXFxuXCYjMzQ7KTtcbjY2NzA6XHRcdFx0XHRmYWxsdGhyb3VnaDtcbjY2NzE6XHRcdFx0Y2FzZSBNVjg4RTZYWFhfRURTQV9TVVBQT1JURUQ6XG42NjcyOlx0XHRcdFx0YnJlYWs7XG42NjczOlx0XHRcdH1cbjY2NzQ6XHRcdFx0YnJlYWs7XG42Njc1Olx0XHRjYXNlIERTQV9UQUdfUFJPVE9fRFNBOlxuNjY3NjpcdFx0XHRicmVhaztcbjY2Nzc6XHRcdGRlZmF1bHQ6XG42Njc4Olx0XHRcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xuNjY3OTpcdFx0fVxuNjY4MDpcdFxuNjY4MTpcdFx0b2xkX3Byb3RvY29sID0gY2hpcC1cdTAwM2V0YWdfcHJvdG9jb2w7XG42NjgyOlx0XHRjaGlwLVx1MDAzZXRhZ19wcm90b2NvbCA9IHByb3RvO1xuNjY4MzpcdFxuNjY4NDpcdFx0bXY4OGU2eHh4X3JlZ19sb2NrKGNoaXApO1xuNjY4NTpcdFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChjcHVfZHAsIGRzKSB7XG42Njg2Olx0XHRcdGVyciA9IG12ODhlNnh4eF9zZXR1cF9wb3J0X21vZGUoY2hpcCwgY3B1X2RwLVx1MDAzZWluZGV4KTtcbjY2ODc6XHRcdFx0aWYgKGVycikge1xuNjY4ODpcdFx0XHRcdG12ODhlNnh4eF9yZWdfdW5sb2NrKGNoaXApO1xuNjY4OTpcdFx0XHRcdGdvdG8gdW53aW5kO1xuNjY5MDpcdFx0XHR9XG42NjkxOlx0XHR9XG42NjkyOlx0XHRtdjg4ZTZ4eHhfcmVnX3VubG9jayhjaGlwKTtcbjY2OTM6XHRcbjY2OTQ6XHRcdHJldHVybiAwO1xuNjY5NTpcdFxuNjY5NjpcdHVud2luZDpcbjY2OTc6XHRcdGNoaXAtXHUwMDNldGFnX3Byb3RvY29sID0gb2xkX3Byb3RvY29sO1xuNjY5ODpcdFxuNjY5OTpcdFx0bXY4OGU2eHh4X3JlZ19sb2NrKGNoaXApO1xuNjcwMDpcdFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydF9jb250aW51ZV9yZXZlcnNlKGNwdV9kcCwgZHMpXG42NzAxOlx0XHRcdG12ODhlNnh4eF9zZXR1cF9wb3J0X21vZGUoY2hpcCwgY3B1X2RwLVx1MDAzZWluZGV4KTtcbjY3MDI6XHRcdG12ODhlNnh4eF9yZWdfdW5sb2NrKGNoaXApO1xuNjcwMzpcdFxuNjcwNDpcdFx0cmV0dXJuIGVycjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3NTcKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkFzc2Vzc2luZyBQcm90b2NvbCBTdXBwb3J0KioKCkFscmlnaHQsIEkmIzM5O20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGNvZGUsIGFuZCBpdCBzZWVtcyBsaWtlIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIG9ubHkgc2V0IHVwIHRvIGhhbmRsZSB0d28gc3BlY2lmaWMgRFNBIHByb3RvY29sIHRhZ3M6IGBEU0FfVEFHX1BST1RPX0VEU0FgIGFuZCBgRFNBX1RBR19QUk9UT19EU0FgLiBUaGF0JiMzOTtzIGEgYml0IGxpbWl0aW5nLCBpc24mIzM5O3QgaXQ/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFib3V0IG90aGVyIHJlbGV2YW50IGhhcmR3YXJlPyBTcGVjaWZpY2FsbHksIEkmIzM5O20gd29uZGVyaW5nIGFib3V0IHRoZSBgcnRsODM2NW1iYCBwcm90b2NvbCAtIGRvZXMgdGhpcyBjb2RlYmFzZSBuZWVkIHRvIGFjY29tbW9kYXRlIHRoYXQgb25lIGF0IGFsbD8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBsaW1pdGVkIHN1cHBvcnQgaXMgaW50ZW50aW9uYWwsIGEgY29uc2Npb3VzIGRlc2lnbiBkZWNpc2lvbiwgb3IgaWYgaXQmIzM5O3MgYSBnYXAgdGhhdCBuZWVkcyB0byBiZSBhZGRyZXNzZWQuIFBlcmhhcHMgaXQgaXMgbm90IHJlbGV2YW50LCBidXQgSSBuZWVkIHRvIGFzayBteXNlbGYgd2hldGhlciB0aGUgc2NvcGUgb2YgcHJvdG9jb2xzIGlzIHByb3Blcmx5IGRlZmluZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjkyMDpcdHN0YXRpYyBpbnQgcnRsODM2NW1iX2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuMjkyMTpcdFx0XHRcdFx0XHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxuMjkyMjpcdHtcbjI5MjM6XHRcdHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuMjkyNDpcdFx0c3RydWN0IHJ0bDgzNjVtYl9jcHUgKmNwdTtcbjI5MjU6XHRcdHN0cnVjdCBydGw4MzY1bWIgKm1iO1xuMjkyNjpcdFxuMjkyNzpcdFx0bWIgPSBwcml2LVx1MDAzZWNoaXBfZGF0YTtcbjI5Mjg6XHRcdGNwdSA9IFx1MDAyNm1iLVx1MDAzZWNwdTtcbjI5Mjk6XHRcbjI5MzA6XHRcdHN3aXRjaCAocHJvdG8pIHtcbjI5MzE6XHRcdGNhc2UgRFNBX1RBR19QUk9UT19SVEw4XzQ6XG4yOTMyOlx0XHRcdGNwdS1cdTAwM2Vmb3JtYXQgPSBSVEw4MzY1TUJfQ1BVX0ZPUk1BVF84QllURVM7XG4yOTMzOlx0XHRcdGNwdS1cdTAwM2Vwb3NpdGlvbiA9IFJUTDgzNjVNQl9DUFVfUE9TX0FGVEVSX1NBO1xuMjkzNDpcdFx0XHRicmVhaztcbjI5MzU6XHRcdGNhc2UgRFNBX1RBR19QUk9UT19SVEw4XzRUOlxuMjkzNjpcdFx0XHRjcHUtXHUwMDNlZm9ybWF0ID0gUlRMODM2NU1CX0NQVV9GT1JNQVRfOEJZVEVTO1xuMjkzNzpcdFx0XHRjcHUtXHUwMDNlcG9zaXRpb24gPSBSVEw4MzY1TUJfQ1BVX1BPU19CRUZPUkVfQ1JDO1xuMjkzODpcdFx0XHRicmVhaztcbjI5Mzk6XHRcdC8qIFRoZSBzd2l0Y2ggYWxzbyBzdXBwb3J0cyBhIDQtYnl0ZSBmb3JtYXQsIHNpbWlsYXIgdG8gcnRsNGEgYnV0IHdpdGhcbjI5NDA6XHRcdCAqIHRoZSBzYW1lIDB4MDQgOC1iaXQgdmVyc2lvbiBhbmQgcHJvYmFibHkgOC1iaXQgcG9ydCBzb3VyY2UvZGVzdC5cbjI5NDE6XHRcdCAqIFRoZXJlIGlzIG5vIHB1YmxpYyBkb2MgYWJvdXQgaXQuIE5vdCBzdXBwb3J0ZWQgeWV0IGFuZCBpdCB3aWxsIHByb2JhYmx5XG4yOTQyOlx0XHQgKiBuZXZlciBiZS5cbjI5NDM6XHRcdCAqL1xuMjk0NDpcdFx0ZGVmYXVsdDpcbjI5NDU6XHRcdFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XG4yOTQ2Olx0XHR9XG4yOTQ3Olx0XG4yOTQ4Olx0XHRyZXR1cm4gcnRsODM2NW1iX2NwdV9jb25maWcocHJpdik7XG4yOTQ5Olx0fVxuMjk1MDpcdFxuMjk1MTpcdHN0YXRpYyBpbnQgcnRsODM2NW1iX3N3aXRjaF9pbml0KHN0cnVjdCByZWFsdGVrX3ByaXYgKnByaXYpXG4yOTUyOlx0e1xuMjk1MzpcdFx0c3RydWN0IHJ0bDgzNjVtYiAqbWIgPSBwcml2LVx1MDAzZWNoaXBfZGF0YTtcbjI5NTQ6XHRcdGNvbnN0IHN0cnVjdCBydGw4MzY1bWJfY2hpcF9pbmZvICpjaTtcbjI5NTU6XHRcdGludCByZXQ7XG4yOTU2Olx0XHRpbnQgaTtcbjI5NTc6XHRcbjI5NTg6XHRcdGNpID0gbWItXHUwMDNlY2hpcF9pbmZvO1xuMjk1OTpcdFxuMjk2MDpcdFx0LyogRG8gYW55IGNoaXAtc3BlY2lmaWMgaW5pdCBqYW0gYmVmb3JlIGdldHRpbmcgdG8gdGhlIGNvbW1vbiBzdHVmZiAqL1xuMjk2MTpcdFx0aWYgKGNpLVx1MDAzZWphbV90YWJsZSkge1xuMjk2MjpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjaS1cdTAwM2VqYW1fc2l6ZTsgaSYjNDM7JiM0MzspIHtcbjI5NjM6XHRcdFx0XHRyZXQgPSByZWdtYXBfd3JpdGUocHJpdi1cdTAwM2VtYXAsIGNpLVx1MDAzZWphbV90YWJsZVtpXS5yZWcsXG4yOTY0Olx0XHRcdFx0XHRcdCAgIGNpLVx1MDAzZWphbV90YWJsZVtpXS52YWwpO1xuMjk2NTpcdFx0XHRcdGlmIChyZXQpXG4yOTY2Olx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuMjk2NzpcdFx0XHR9XG4yOTY4Olx0XHR9XG4yOTY5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE0IDAyOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3ODIwCgkJCQkJCQlvdXRwdXQ6IDE2NAoJCQkJCQkJdGhvdWdodHM6IDExMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBhIFZlbmRvci1TcGVjaWZpYyBNRElPIFN3aXRjaCBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBkaWdnaW5nIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIGBEU0FfVEFHX1BST1RPX1lUOTIyWGAgcHJvdG9jb2wgaXMgYSBkZWFkIGVuZCBpbiB0aGUgY29udGV4dCBvZiBzdGFuZGFyZCB2aXJ0dWFsaXphdGlvbi4gSXQgb25seSBzdXBwb3J0cyBgRFNBX1RBR19QUk9UT19SVEw4XzRgIGFuZCBgRFNBX1RBR19QUk9UT19SVEw4XzRUYCwgc28gdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGR5bmFtaWNhbGx5IHN3aXRjaCBleGlzdGluZyBEU0Egc3dpdGNoIGRyaXZlcnMgdG8gdGhpcyBuZXcgcHJvdG9jb2wuCgpJIGNvbnNpZGVyZWQsIGNvdWxkIHdlIHNpbXBseSBsb2FkIHRoZSBgeXQ5MjF4YCBtb2R1bGU/IFRoZSBtb2R1bGUgYHRhZ195dDkyMXgua29gIHJlZ2lzdGVycyB0aGUgdGFnIGRyaXZlciwgYnV0IGl0cyBgeG1pdGAgYW5kIGByY3ZgIGZ1bmN0aW9ucyB3aWxsIG5ldmVyIGJlIGNhbGxlZC4gQmVjYXVzZSBubyBEU0Egc3dpdGNoIHVzZXMgdGhlIG5ldyBwcm90b2NvbC4gRnVydGhlcm1vcmUsIHRoZSBjb3JyZXNwb25kaW5nIGB5dDkyeHhfbWRpb19kcml2ZXJgIHdvbiYjMzk7dCBwcm9iZSBzaW5jZSB0aGVyZSYjMzk7cyBubyBtYXRjaGluZyBEZXZpY2UgVHJlZSBub2RlLiBUaGlzIHdob2xlIGJsb2NrIG9mIGNvZGUsIEkmIzM5O3ZlIGNvbmNsdWRlZCwgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgRFQgaW5qZWN0aW9uLCB3aGljaCBhcmVuJiMzOTt0IHN0YW5kYXJkLgoKSSByYW4gdGhyb3VnaCBhIGZldyBzY2VuYXJpb3MgaW4gbXkgbWluZC4gQ291bGQgYSB1c2VyIGNyZWF0ZSBhIGR1bW15IG5ldGRldmljZSBhbmQgc2V0IGl0cyBgZHNhX3B0cmA/IE5vLCB0aGUgRFNBIGNvcmUgbWFuYWdlcyB0aGlzLCByZXF1aXJpbmcgYSByZWdpc3RlcmVkIERTQSBzd2l0Y2guIERUIGluamVjdGlvbj8gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIG1lY2hhbmlzbSBmb3IgTURJTyBkZXZpY2VzIG9uIHg4Nl82NDsgYHN5el9kZXZsaW5rYCBpcyBkaWZmZXJlbnQgYW5kIHRoZSBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgIGNhbGwgaXMgZm9yIHBsYXRmb3JtIGRldmljZXMsIG5vdCBNRElPLgoKVGhlbiBJIGNvbnNpZGVyZWQgaWYgd2UgY291bGQgY2FsbCBgeXQ5Mnh4X21kaW9fcHJvYmVgIHZpYSBhIHBsYXRmb3JtIGRldmljZT8gTm8sIGl0JiMzOTtzIHJlZ2lzdGVyZWQgYXMgYW4gYG1kaW9fZHJpdmVyYCB3aGljaCByZXF1aXJlcyBhbiBNRElPIGJ1cyB0byBwcm9iZS4gRXZlbiBpZiB3ZSBjb3VsZCBjb25qdXJlIGFuIE1ESU8gZGV2aWNlLCBpdCBuZWVkcyBgb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldilgIHRvIG5vdCBiZSBOVUxMLCB3aGljaCBpcyB0byBzYXksIGl0IE1VU1QgaGF2ZSBhIERUIG5vZGUuIFNpbmNlIHg4Nl82NCBRRU1VIGRvZXNuJiMzOTt0IHVzZSBEZXZpY2UgVHJlZSwgaXQgdXNlcyBBQ1BJLCBzbyB0aGF0IGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIE5VTEwuIFRoZXJlJiMzOTtzIG5vIEFDUEkgbWF0Y2ggdGFibGUsIG9ubHkgYG9mX21hdGNoX3RhYmxlYC4gU28sIG9uIHg4Nl82NCwgdGhpcyBkcml2ZXIgd29uJiMzOTt0IHByb2JlLgoKSSByZW1lbWJlcmVkIHN5emthbGxlciBhbHNvIHJ1bnMgb24gQVJNNjQuIERvZXMgaXQgaW5qZWN0IERUIG5vZGVzIHRoZXJlPyBObywgaXQgdXNlcyBhIHN0YXRpYyBEVEIsIHNvIG5vIGR5bmFtaWMgYWRkaXRpb24uIFRoaXMgZnVydGhlciBzb2xpZGlmaWVzIHRoZSBkcml2ZXImIzM5O3MgdW5yZWFjaGFiaWxpdHkuCgpMZXQgbWUgcmV2aWV3IHRoZSBndWlkZWxpbmVzLiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiAtIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiAtIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgLi4uIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIE1ESU8gc3dpdGNoIGRyaXZlciBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUvWVQ5MjI0LCByZXF1aXJpbmcgZWl0aGVyIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGEgc3BlY2lmaWMgRFQgbm9kZSB0aGF0IGlzbiYjMzk7dCBwcmVzZW50IGluIHN0YW5kYXJkIGVudmlyb25tZW50cy4gSXQmIzM5O3MgdW5yZWFjaGFibGUuCgpMZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBvdGhlciBjaGFuZ2VzLiBUaGVyZSBhcmUgS2NvbmZpZyBjaGFuZ2VzLCBNYWtlZmlsZSBjaGFuZ2VzLCB0aGUgTURJTyBkcml2ZXIgKGB5dDkyMXguY2ApLCBhIGhlYWRlciwgYWRkcyBgRFNBX1RBR19QUk9UT19ZVDkyMlhfVkFMVUVgIGluIGBkc2EuaGAgYW5kIHRoZSB0YWcgZHJpdmVyIChgdGFnX3l0OTIxeC5jYCkuIEV2ZXJ5dGhpbmcgcG9pbnRzIHRvIHRoaXMgTW90b3Jjb21tIHN3aXRjaCBkcml2ZXIgYW5kIGl0cyB0YWcgZHJpdmVyLgoKU2luY2UgdGhlIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBhbmQgdGhlIGRyaXZlciB3b24mIzM5O3QgcHJvYmUgd2l0aG91dCBhIHNwZWNpZmljIERUIG5vZGUsIGl0JiMzOTtzIGFsbCB1bnJlYWNoYWJsZS4KCkkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjI0IGV0aGVybmV0IHN3aXRjaCBjaGlwIHRvIHRoZSB5dDkyMXggRFNBIGRyaXZlciBhbmQgYSBjb3JyZXNwb25kaW5nIERTQSB0YWcgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIGFuIE1ESU8gZHJpdmVyIHRoYXQgcmVsaWVzIG9uIERldmljZSBUcmVlIChPRiBtYXRjaCBkYXRhKSB0byBwcm9iZSwgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBvciBkeW5hbWljYWxseSBpbmplY3RhYmxlIGluIHN0YW5kYXJkIHg4Nl82NCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIEZ1cnRoZXJtb3JlLCB0aGUgRFNBIHRhZyBkcml2ZXIgY2Fubm90IGJlIHJlYWNoZWQgYmVjYXVzZSBubyBlbXVsYXRlZCBEU0Egc3dpdGNoIChsaWtlIGRzYV9sb29wKSBjYW4gYmUgY29uZmlndXJlZCB0byB1c2UgdGhlIG5ld2x5IGFkZGVkIERTQV9UQUdfUFJPVE9fWVQ5MjJYIHByb3RvY29sLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMjQgZXRoZXJuZXQgc3dpdGNoIGNoaXAgdG8gdGhlIHl0OTIxeCBEU0EgZHJpdmVyIGFuZCBhIGNvcnJlc3BvbmRpbmcgRFNBIHRhZyBkcml2ZXIuIFRoZSBkcml2ZXIgaXMgYW4gTURJTyBkcml2ZXIgdGhhdCByZWxpZXMgb24gRGV2aWNlIFRyZWUgKE9GIG1hdGNoIGRhdGEpIHRvIHByb2JlLCB3aGljaCBpcyBub3QgYXZhaWxhYmxlIG9yIGR5bmFtaWNhbGx5IGluamVjdGFibGUgaW4gc3RhbmRhcmQgeDg2XzY0IFFFTVUvR0NFIGVudmlyb25tZW50cy4gRnVydGhlcm1vcmUsIHRoZSBEU0EgdGFnIGRyaXZlciBjYW5ub3QgYmUgcmVhY2hlZCBiZWNhdXNlIG5vIGVtdWxhdGVkIERTQSBzd2l0Y2ggKGxpa2UgZHNhX2xvb3ApIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSB0aGUgbmV3bHkgYWRkZWQgRFNBX1RBR19QUk9UT19ZVDkyMlggcHJvdG9jb2wuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTQgMDI6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjIxOjI2LjgyNTU4ODMyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTc1NjcwMzMyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMjQgZXRoZXJuZXQgc3dpdGNoIGNoaXAgdG8gdGhlIHl0OTIxeCBEU0EgZHJpdmVyIGFuZCBhIGNvcnJlc3BvbmRpbmcgRFNBIHRhZyBkcml2ZXIuIFRoZSBkcml2ZXIgaXMgYW4gTURJTyBkcml2ZXIgdGhhdCByZWxpZXMgb24gRGV2aWNlIFRyZWUgKE9GIG1hdGNoIGRhdGEpIHRvIHByb2JlLCB3aGljaCBpcyBub3QgYXZhaWxhYmxlIG9yIGR5bmFtaWNhbGx5IGluamVjdGFibGUgaW4gc3RhbmRhcmQgeDg2XzY0IFFFTVUvR0NFIGVudmlyb25tZW50cy4gRnVydGhlcm1vcmUsIHRoZSBEU0EgdGFnIGRyaXZlciBjYW5ub3QgYmUgcmVhY2hlZCBiZWNhdXNlIG5vIGVtdWxhdGVkIERTQSBzd2l0Y2ggKGxpa2UgZHNhX2xvb3ApIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSB0aGUgbmV3bHkgYWRkZWQgRFNBX1RBR19QUk9UT19ZVDkyMlggcHJvdG9jb2wuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjE6MjYuODI1NTk0NTI5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODg0NzQwOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYjkzMWU5MDJmMTgxZWExODI1MGI1OWFjOTQ3MzgyNWRkMWYyYjE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDE0IDAyOjIxOjI1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG5pbmRleCA0YWI1NjdjNWJiYWZjLi42OWM4MjRmZDk1YmY5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcXG5AQCAtMTU5LDExICsxNTksMTEgQEAgY29uZmlnIE5FVF9EU0FfVklURVNTRV9WU0M3M1hYX1BMQVRGT1JNXFxuIFxcdCAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXJcXG4gXFx0ICBhIENQVS1hdHRhY2hlZCBhZGRyZXNzIGJ1cyBhbmQgd29yayBpbiBtZW1vcnktbWFwcGVkIEkvTyBtb2RlLlxcbiBcXG4tY29uZmlnIE5FVF9EU0FfWVQ5MjFYXFxuLVxcdHRyaXN0YXRlIFxcXCJNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcXFwiXFxuLVxcdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcXG4rY29uZmlnIE5FVF9EU0FfWVQ5MlhYXFxuK1xcdHRyaXN0YXRlIFxcXCJNb3RvcmNvbW0gWVQ5MjE1IGFuZCBZVDkyMjQgZXRoZXJuZXQgc3dpdGNoIGNoaXAgc3VwcG9ydFxcXCJcXG4rXFx0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTJYWFxcbiBcXHRzZWxlY3QgTkVUX0lFRUU4MDIxUV9IRUxQRVJTIGlmIERDQlxcbiBcXHRoZWxwXFxuLVxcdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxcbitcXHQgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIxNSBhbmQgWVQ5MjI0IGV0aGVybmV0IHN3aXRjaFxcbiBcXHQgIGNoaXAuXFxuIGVuZG1lbnVcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXFxuaW5kZXggZDI5NzViYWRmZmMwOS4uMThjMmNlZWYwOWE1MSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcXG5AQCAtMTQsNyArMTQsNyBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9TTVNDX0xBTjkzMDNfTURJTykgKz0gbGFuOTMwM19tZGlvLm9cXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYKSArPSB2aXRlc3NlLXZzYzczeHgtY29yZS5vXFxuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgKz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVklURVNTRV9WU0M3M1hYX1NQSSkgKz0gdml0ZXNzZS12c2M3M3h4LXNwaS5vXFxuLW9iai0kKENPTkZJR19ORVRfRFNBX1lUOTIxWCkgKz0geXQ5MjF4Lm9cXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MlhYKSArPSB5dDkyMXgub1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGI1My9cXG4gb2JqLXlcXHRcXHRcXHRcXHQrPSBoaXJzY2htYW5uL1xcbiBvYmoteVxcdFxcdFxcdFxcdCs9IGxhbnRpcS9cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jIGIvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jXFxuaW5kZXggMTU5YjE2NjA2ZjZjYS4uNzQyNTU1Zjg3ODE5ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcXG5AQCAtMTQ4LDEwICsxNDgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCB5dDkyMXhfaW5mbyB5dDkyMXhfaW5mb3NbXSA9IHtcXG4gXFx0XFx0WVQ5MjFYX1BPUlRfTUFTS19JTlQwX24oOCksXFxuIFxcdFxcdFlUOTIxWF9QT1JUX01BU0tfRVhUMCB8IFlUOTIxWF9QT1JUX01BU0tfRVhUMSxcXG4gXFx0fSxcXG4rXFx0e1xcbitcXHRcXHRcXFwiWVQ5MjI0XFxcIiwgWVQ5MjI0X01BSk9SLCAwLCAwLFxcbitcXHRcXHQweDFmMSxcXG4rXFx0XFx0MHgwLFxcbitcXHR9LFxcbiBcXHR7fVxcbiB9O1xcbiBcXG4tI2RlZmluZSBZVDkyMVhfTkFNRVxcdFxcXCJ5dDkyMXhcXFwiXFxuKyNkZWZpbmUgWVQ5MlhYX05BTUVcXHRcXFwieXQ5Mnh4XFxcIlxcbiBcXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVxcdDQwOTVcXG4gXFxuQEAgLTU2MCwxMCArNTY1LDEyIEBAIHl0OTIxeF9pbnRpZl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxcbiBzdGF0aWMgaW50IHl0OTIxeF9tYnVzX2ludF9yZWFkKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZylcXG4ge1xcbiBcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtYnVzLVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgbWF4X3BvcnRzO1xcbiBcXHR1MTYgdmFsO1xcbiBcXHRpbnQgcmVzO1xcbiBcXG4tXFx0aWYgKHBvcnQgXFx1MDAzZT0gWVQ5MjFYX1BPUlRfTlVNKVxcbitcXHRtYXhfcG9ydHMgPSBwcml2LVxcdTAwM2VjaGlwX2luZm8tXFx1MDAzZXBvcnRzO1xcbitcXHRpZiAocG9ydCBcXHUwMDNlPSBtYXhfcG9ydHMpXFxuIFxcdFxcdHJldHVybiBVMTZfTUFYO1xcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbkBAIC01NzksOSArNTg2LDExIEBAIHN0YXRpYyBpbnRcXG4geXQ5MjF4X21idXNfaW50X3dyaXRlKHN0cnVjdCBtaWlfYnVzICptYnVzLCBpbnQgcG9ydCwgaW50IHJlZywgdTE2IGRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWJ1cy1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IG1heF9wb3J0cztcXG4gXFx0aW50IHJlcztcXG4gXFxuLVxcdGlmIChwb3J0IFxcdTAwM2U9IFlUOTIxWF9QT1JUX05VTSlcXG4rXFx0bWF4X3BvcnRzID0gcHJpdi1cXHUwMDNlY2hpcF9pbmZvLVxcdTAwM2Vwb3J0cztcXG4rXFx0aWYgKHBvcnQgXFx1MDAzZT0gbWF4X3BvcnRzKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuIFxcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG5AQCAtNTk2LDE5ICs2MDUsMjEgQEAgeXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcXG4ge1xcbiBcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuIFxcdHN0cnVjdCBtaWlfYnVzICptYnVzO1xcbitcXHRpbnQgbWF4X3BvcnRzO1xcbiBcXHRpbnQgcmVzO1xcbiBcXG4gXFx0bWJ1cyA9IGRldm1fbWRpb2J1c19hbGxvYyhkZXYpO1xcbiBcXHRpZiAoIW1idXMpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG4rXFx0bWF4X3BvcnRzID0gcHJpdi1cXHUwMDNlY2hpcF9pbmZvLVxcdTAwM2Vwb3J0cztcXG4gXFx0bWJ1cy1cXHUwMDNlbmFtZSA9IFxcXCJZVDkyMXggaW50ZXJuYWwgTURJTyBidXNcXFwiO1xcbiBcXHRzbnByaW50ZihtYnVzLVxcdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcXFwiJXNcXFwiLCBkZXZfbmFtZShkZXYpKTtcXG4gXFx0bWJ1cy1cXHUwMDNlcHJpdiA9IHByaXY7XFxuIFxcdG1idXMtXFx1MDAzZXJlYWQgPSB5dDkyMXhfbWJ1c19pbnRfcmVhZDtcXG4gXFx0bWJ1cy1cXHUwMDNld3JpdGUgPSB5dDkyMXhfbWJ1c19pbnRfd3JpdGU7XFxuIFxcdG1idXMtXFx1MDAzZXBhcmVudCA9IGRldjtcXG4tXFx0bWJ1cy1cXHUwMDNlcGh5X21hc2sgPSAodTMyKX5HRU5NQVNLKFlUOTIxWF9QT1JUX05VTSAtIDEsIDApO1xcbitcXHRtYnVzLVxcdTAwM2VwaHlfbWFzayA9ICh1MzIpfkdFTk1BU0sobWF4X3BvcnRzIC0gMSwgMCk7XFxuIFxcbiBcXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xcbiBcXHRpZiAocmVzKVxcbkBAIC00NzQ4LDYgKzQ3NTksMTMgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0c3RydWN0IGRldmljZV9ub2RlICpjaGlsZDtcXG4gXFx0aW50IHJlcztcXG4gXFxuK1xcdGZvciAoc2l6ZV90IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldO1xcbitcXG4rXFx0XFx0cHAtXFx1MDAzZWluZGV4ID0gaTtcXG4rXFx0XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnBwLVxcdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcXG4rXFx0fVxcbitcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbiBcXHRyZXMgPSB5dDkyMXhfY2hpcF9yZXNldChwcml2KTtcXG4gXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuQEAgLTQ4NjksMTE0ICs0ODg3LDkzNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIxeF9kc2Ffc3dpdGNoX29wcyA9IHtcXG4gXFx0LnNldHVwXFx0XFx0XFx0PSB5dDkyMXhfZHNhX3NldHVwLFxcbiB9O1xcbiBcXG4tc3RhdGljIHZvaWQgeXQ5MjF4X21kaW9fc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbitzdGF0aWMgaW50IHl0OTIyeF9wb3J0X2Rvd24oc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcXG4ge1xcbi1cXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpO1xcbitcXHR1MzIgbWFzaztcXG4rXFx0aW50IHJlcztcXG4gXFxuLVxcdGlmICghcHJpdilcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHQvKiBtYWMgZm9yY2UgZG93biAqL1xcbitcXHRtYXNrID0gWVQ5MjJYX1BPUlRfTElOSyB8IFlUOTIyWF9QT1JUX1JYX01BQ19FTiB8XFxuK1xcdCAgICAgICBZVDkyMlhfUE9SVF9UWF9NQUNfRU4gfCBZVDkyMlhfUE9SVF9MSU5LX0FOO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX2NsZWFyX2JpdHMocHJpdiwgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCksIG1hc2spO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHQvKiBOZWVkIGZvcmNlIG9wIHRvIG1ha2Ugc29mdCBjb25maWd1cmF0aW9uIGVmZmVjdGl2ZSAqL1xcbitcXHRtYXNrID0gWVQ5MjJYX1BPUlRfRk9SQ0VfT1A7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCksIG1hc2spO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbiBcXG4tXFx0ZHNhX3N3aXRjaF9zaHV0ZG93bihcXHUwMDI2cHJpdi1cXHUwMDNlZHMpO1xcbitcXHQvKiBkaXNhYmxlIGVuX3BoeSAqL1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX2NsZWFyX2JpdHMocHJpdiwgWVQ5MjJYX0VOX1BIWV9WQUxVRSwgQklUKHBvcnQpKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfRU5fUEhZX09WRVJXUklURSwgQklUKHBvcnQpKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbitzdGF0aWMgdm9pZFxcbit5dDkyMnhfcGh5bGlua19tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4rXFx0XFx0XFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbiB7XFxuLVxcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRwLVxcdTAwM2Vkcyk7XFxuK1xcdGludCBwb3J0ID0gZHAtXFx1MDAzZWluZGV4O1xcbitcXHRpbnQgcmVzO1xcbiBcXG4tXFx0aWYgKCFwcml2KVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjJ4X3BvcnRfZG93bihwcml2LCBwb3J0KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuIFxcbi1cXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVxcdTAwM2Vwb3J0cyk7IGktLSBcXHUwMDNlIDA7ICkge1xcbi1cXHRcXHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRkZXZfZXJyKGRwLVxcdTAwM2Vkcy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvICVzIHBvcnQgJWQ6ICVpXFxcXG5cXFwiLCBcXFwiYnJpbmcgZG93blxcXCIsXFxuK1xcdFxcdFxcdHBvcnQsIHJlcyk7XFxuK31cXG4gXFxuLVxcdFxcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNnBwLVxcdTAwM2VtaWJfcmVhZCk7XFxuK3N0YXRpYyBpbnRcXG4reXQ5MjJ4X3BvcnRfdXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IG1vZGUsXFxuK1xcdCAgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQsIGludCBkdXBsZXgsXFxuK1xcdCAgICAgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxcbit7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdHN3aXRjaCAoc3BlZWQpIHtcXG4rXFx0Y2FzZSBTUEVFRF8xMDpcXG4rXFx0XFx0Y3RybCA9IFlUOTIxWF9QT1JUX1NQRUVEXzEwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBTUEVFRF8xMDA6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDA7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFNQRUVEXzEwMDA6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDAwO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBTUEVFRF8yNTAwOlxcbitcXHRcXHRjdHJsID0gWVQ5MjFYX1BPUlRfU1BFRURfMjUwMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgU1BFRURfMTAwMDA6XFxuK1xcdFxcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDAwMDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHR9XFxuK1xcdGlmIChkdXBsZXggPT0gRFVQTEVYX0ZVTEwpXFxuK1xcdFxcdGN0cmwgfD0gWVQ5MjJYX1BPUlRfRFVQTEVYX0ZVTEw7XFxuK1xcdGlmICh0eF9wYXVzZSlcXG4rXFx0XFx0Y3RybCB8PSBZVDkyMlhfUE9SVF9UWF9QQVVTRTtcXG4rXFx0aWYgKHJ4X3BhdXNlKVxcbitcXHRcXHRjdHJsIHw9IFlUOTIyWF9QT1JUX1JYX1BBVVNFO1xcbitcXHRjdHJsIHw9IFlUOTIyWF9QT1JUX1JYX01BQ19FTiB8IFlUOTIyWF9QT1JUX1RYX01BQ19FTiB8XFxuK1xcdFxcdFlUOTIyWF9QT1JUX0NGR19UWF9FTiB8IFlUOTIyWF9QT1JUX0xJTksgfFxcbitcXHRcXHRZVDkyMlhfUE9SVF9DRkdfUlhfRU47XFxuK1xcdGN0cmwgXFx1MDAyNj0gfihZVDkyMlhfUE9SVF9GQ19BTiB8IFlUOTIyWF9QT1JUX0xJTktfQU4pO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9QT1JUbl9DVFJMKHBvcnQpLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0LyogZm9yY2Ugb3AgKi9cXG4rXFx0bWFzayA9IFlUOTIyWF9QT1JUX0ZPUkNFX09QO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIyWF9QT1JUbl9DVFJMKHBvcnQpLCBtYXNrKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4gXFxuLVxcdGRzYV91bnJlZ2lzdGVyX3N3aXRjaChcXHUwMDI2cHJpdi1cXHUwMDNlZHMpO1xcbitcXHQvKiBlbmFibGUgZW5fcGh5ICovXFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjJYX0VOX1BIWV9WQUxVRSwgQklUKHBvcnQpKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfRU5fUEhZX09WRVJXUklURSwgQklUKHBvcnQpKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4gXFxuLVxcdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFxcdTAwM2MgQVJSQVlfU0laRShwcml2LVxcdTAwM2VhY2xfYmxrcyk7IGkrKykge1xcbi1cXHRcXHRzdHJ1Y3QgeXQ5MjF4X2FjbF9ibGsgKmFjbGJsayA9IHByaXYtXFx1MDAzZWFjbF9ibGtzW2ldO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbiBcXG4tXFx0XFx0aWYgKCFhY2xibGspXFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiBcXHUwMDNjIEFSUkFZX1NJWkUoYWNsYmxrLVxcdTAwM2VydWxlcyk7IGorKykge1xcbi1cXHRcXHRcXHRzdHJ1Y3QgeXQ5MjF4X2FjbF9ydWxlICphY2xydWxlID0gYWNsYmxrLVxcdTAwM2VydWxlc1tqXTtcXG4rc3RhdGljIHZvaWRcXG4reXQ5MjJ4X3BoeWxpbmtfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXFxuK1xcdFxcdFxcdCAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHVuc2lnbmVkIGludCBtb2RlLFxcbitcXHRcXHRcXHQgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLCBpbnQgc3BlZWQsIGludCBkdXBsZXgsXFxuK1xcdFxcdFxcdCAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXFxuK3tcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV9waHlsaW5rX3RvX3BvcnQoY29uZmlnKTtcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHAtXFx1MDAzZWRzKTtcXG4rXFx0aW50IHBvcnQgPSBkcC1cXHUwMDNlaW5kZXg7XFxuK1xcdGludCByZXM7XFxuIFxcbi1cXHRcXHRcXHRpZiAoIWFjbHJ1bGUpXFxuLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRrdmZyZWUoYWNscnVsZSk7XFxuLVxcdFxcdH1cXG4tXFx0XFx0a3ZmcmVlKGFjbGJsayk7XFxuLVxcdH1cXG4tXFx0bXV0ZXhfZGVzdHJveShcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIyeF9wb3J0X3VwKHByaXYsIHBvcnQsIG1vZGUsIGludGVyZmFjZSwgc3BlZWQsIGR1cGxleCxcXG4rXFx0XFx0XFx0ICAgICB0eF9wYXVzZSwgcnhfcGF1c2UpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdGRldl9lcnIoZHAtXFx1MDAzZWRzLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcXFxcblxcXCIsIFxcXCJicmluZyB1cFxcXCIsXFxuK1xcdFxcdFxcdHBvcnQsIHJlcyk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbitzdGF0aWMgaW50XFxuK3l0OTIyeF9pbnRpZl9leHRfcmVhZChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgKnZhbHApXFxuIHtcXG4tXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG4tXFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcXG4tXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2O1xcbi1cXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XFxuK1xcdGludCByZXM7XFxuIFxcbi1cXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghcHJpdilcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdGlmIChwb3J0IFxcdTAwM2U9IFlUOTIyWF9QT1JUX05VTSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIFxcbi1cXHRtZGlvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCptZGlvKSwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmICghbWRpbylcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBwb3J0LCBZVDkyWFhfUEFHRV9TRUxFQ1QsIHJlZyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuIFxcbi1cXHRtZGlvLVxcdTAwM2VidXMgPSBtZGlvZGV2LVxcdTAwM2VidXM7XFxuLVxcdG1kaW8tXFx1MDAzZWFkZHIgPSBtZGlvZGV2LVxcdTAwM2VhZGRyO1xcbi1cXHRtZGlvLVxcdTAwM2Vzd2l0Y2hpZCA9IDA7XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9yZWFkKHByaXYsIHBvcnQsIFlUOTJYWF9QQUdFLCB2YWxwKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4gXFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4gXFxuLVxcdHByaXYtXFx1MDAzZXJlZ19vcHMgPSBcXHUwMDI2eXQ5MjF4X3JlZ19vcHNfbWRpbztcXG4tXFx0cHJpdi1cXHUwMDNlcmVnX2N0eCA9IG1kaW87XFxuK3N0YXRpYyBpbnRcXG4reXQ5MjF4X2ludGlmX2V4dF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXM7XFxuIFxcbi1cXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlcG9ydHMpOyBpKyspIHtcXG4tXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG4rXFx0aWYgKHBvcnQgXFx1MDAzZT0gWVQ5MjFYX1BPUlRfTlVNKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gXFxuLVxcdFxcdHBwLVxcdTAwM2VpbmRleCA9IGk7XFxuLVxcdFxcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZwcC1cXHUwMDNlbWliX3JlYWQsIHl0OTIxeF9wb2xsX21pYik7XFxuLVxcdH1cXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIHBvcnQsIFlUOTJYWF9QQUdFX1NFTEVDVCwgcmVnKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4gXFxuLVxcdGRzID0gXFx1MDAyNnByaXYtXFx1MDAzZWRzO1xcbi1cXHRkcy1cXHUwMDNlZGV2ID0gZGV2O1xcbi1cXHRkcy1cXHUwMDNlYXNzaXN0ZWRfbGVhcm5pbmdfb25fY3B1X3BvcnQgPSB0cnVlO1xcbi1cXHRkcy1cXHUwMDNlZHNjcF9wcmlvX21hcHBpbmdfaXNfZ2xvYmFsID0gdHJ1ZTtcXG4tXFx0ZHMtXFx1MDAzZXByaXYgPSBwcml2O1xcbi1cXHRkcy1cXHUwMDNlb3BzID0gXFx1MDAyNnl0OTIxeF9kc2Ffc3dpdGNoX29wcztcXG4tXFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21pbiA9IDEgKiA1MDAwO1xcbi1cXHRkcy1cXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDUwMDA7XFxuLVxcdGRzLVxcdTAwM2VwaHlsaW5rX21hY19vcHMgPSBcXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcztcXG4tXFx0ZHMtXFx1MDAzZW51bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07XFxuLVxcdGRzLVxcdTAwM2VudW1fcG9ydHMgPSBZVDkyMVhfUE9SVF9OVU07XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBwb3J0LCBZVDkyWFhfUEFHRSwgdmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4gXFxuLVxcdG1kaW9kZXZfc2V0X2RydmRhdGEobWRpb2RldiwgcHJpdik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XFxuK3N0YXRpYyBpbnQgeXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0KGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHQgICAgICAgZW51bSB5dDkyMnhfcGh5X3JlZ190eXBlIHJlZ190eXBlLFxcbitcXHRcXHRcXHRcXHQgICAgICAgZW51bSB5dDkyMnhfcGh5X3JlZ19zcGFjZSByZWdfc3BhY2UpXFxuK3tcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmIChwb3J0IFxcdTAwM2U9IDQgXFx1MDAyNlxcdTAwMjYgcG9ydCBcXHUwMDNjPSA3KSB7XFxuK1xcdFxcdHN3aXRjaCAocmVnX3R5cGUpIHtcXG4rXFx0XFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQ6XFxuK1xcdFxcdFxcdHJlcyA9IDk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfUEhZX0NPTU1PTl9FWFQ6XFxuK1xcdFxcdFxcdGlmIChwb3J0IFxcdTAwM2M9IDUgXFx1MDAyNlxcdTAwMjYgcG9ydCBcXHUwMDNlPSA0KVxcbitcXHRcXHRcXHRcXHRyZXMgPSA0O1xcbitcXHRcXHRcXHRlbHNlIGlmIChwb3J0IFxcdTAwM2M9IDcgXFx1MDAyNlxcdTAwMjYgcG9ydCBcXHUwMDNlPSA2KVxcbitcXHRcXHRcXHRcXHRyZXMgPSA2O1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhUOlxcbitcXHRcXHRcXHRyZXMgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0aWYgKHJlZ19zcGFjZSAhPSBZVDkyMlhfUEhZX1JFR19TUEFDRV9QSFkpXFxuK1xcdFxcdFxcdFxcdHJlcyA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGlmIChwb3J0ID09IDgpIHtcXG4rXFx0XFx0XFx0c3dpdGNoIChyZWdfdHlwZSkge1xcbitcXHRcXHRcXHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfQ09NTU9OX0VYVDpcXG4rXFx0XFx0XFx0XFx0cmVzID0gOTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVDpcXG4rXFx0XFx0XFx0XFx0cmVzID0gODtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9NSUk6XFxuK1xcdFxcdFxcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9FWFQ6XFxuK1xcdFxcdFxcdFxcdGlmIChyZWdfc3BhY2UgPT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkgfHxcXG4rXFx0XFx0XFx0XFx0ICAgIHJlZ19zcGFjZSA9PSBZVDkyMlhfUEhZX1JFR19TUEFDRV9VU1hHTUlJKVxcbitcXHRcXHRcXHRcXHRcXHRyZXMgPSA4O1xcbitcXHRcXHRcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdFxcdFxcdHJlcyA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRcXHRyZXMgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRcXHR9XFxuK1xcdFxcdHN3aXRjaCAocmVnX3R5cGUpIHtcXG4rXFx0XFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQ6XFxuK1xcdFxcdFxcdHJlcyA9IDk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQ6XFxuK1xcdFxcdFxcdHJlcyA9IDA7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfTUlJOlxcbitcXHRcXHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfRVhUOlxcbitcXHRcXHRcXHRpZiAocmVnX3NwYWNlID09IFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJIHx8XFxuK1xcdFxcdFxcdCAgICByZWdfc3BhY2UgPT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfVVNYR01JSSlcXG4rXFx0XFx0XFx0XFx0cmVzID0gMDtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRyZXMgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0cmVzID0gLUVJTlZBTDtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4gfVxcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5MjF4X29mX21hdGNoW10gPSB7XFxuLVxcdHsgLmNvbXBhdGlibGUgPSBcXFwibW90b3Jjb21tLHl0OTIxNVxcXCIgfSxcXG4rc3RhdGljIGludCB5dDkyMnhfcG9ydF9zZHNfaW5pdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LFxcbitcXHRcXHRcXHRcXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdGludCBhZGRyO1xcbitcXHR1MTYgZGF0YTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQocG9ydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkpO1xcbitcXHRpZiAoYWRkciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHQvKiB3cml0ZSBwcm90ZWN0ICovXFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0YmUsIDB4ZCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdC8qIENEUiAqL1xcbitcXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDBCQVNFWCkge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDA2LCAweDApO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDE2LCAweDM0NTgpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDA2LCAweDgwMCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MTYsIDB4NDU1OCk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdH1cXG4rXFx0LyogUExMICovXFxuK1xcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzYSwgMHgxMDA2KTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzZiwgMHgzMDI5KTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQyYSwgMHhmMDcwKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzZCwgMHgyMDdkKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzYywgMHgyMDdkKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzZiwgMHgzMDMyKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzYSwgMHg2KTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0XFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQyYSwgMHhmMDcwKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0fVxcbitcXHQvKiBWQ08gKi9cXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzOSwgMHhDMCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdC8qIFZkYWMgKi9cXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ5MiwgMHg3ZjdmKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ5MSwgMHg3Zik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdC8qIEV5ZSAqL1xcbitcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDU0LCAweGYxNCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTcsIDB4YTQ0KTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRjZCwgMHgwKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0YWYsIDB4NDVlMyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OGEsIDB4ZmZmKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQwOCwgMHg3YzAwKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRkNiwgMHg3Zik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0NGYsIDB4ZmYwOCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdC8qIEZGRSAqL1xcbitcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDhlLCAweDdkMDApO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4ZCwgMHg2MGYpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHQvKiBDVExFICovXFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0YjAsIDB4ODA0KTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRiMSwgMHg3Nzc0KTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRhZiwgMHg0NWU3KTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDMsIDB4NTYwMyk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRtc2xlZXAoMjApO1xcbitcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDkyLCAweDdmZmYpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDkyLCAweDdmN2YpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHQvKiBDVExFICovXFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHgyMDAwLCAweDQwKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDIwMDAsIDB4MCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSkge1xcbitcXHRcXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4MTA0MiwgMHg0OGMpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbisgICAgLyogc29mdCByZXNldCAqL1xcbitcXHRhZGRyID0geXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0KHBvcnQsIFlUOTIyWF9QSFlfUkVHX1RZUEVfTUlJLFxcbitcXHRcXHRcXHRcXHRcXHQgICBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSk7XFxuK1xcdGlmIChhZGRyIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX3JlYWQocHJpdiwgYWRkciwgMHgyMDAwLCBcXHUwMDI2ZGF0YSk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdGRhdGEgXFx1MDAyNj0gfigxIFxcdTAwM2NcXHUwMDNjIDE1KTtcXG4rXFx0cmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIGFkZHIsIDB4MjAwMCwgZGF0YSk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdGFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQocG9ydCwgWVQ5MjJYX1BIWV9SRUdfVFlQRV9NSUksXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFlUOTIyWF9QSFlfUkVHX1NQQUNFX1VTWEdNSUkpO1xcbitcXHRpZiAoYWRkciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl9yZWFkKHByaXYsIGFkZHIsIDB4MCwgXFx1MDAyNmRhdGEpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRkYXRhIHw9IDEgXFx1MDAzY1xcdTAwM2MgMTU7XFxuK1xcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBhZGRyLCAweDAsIGRhdGEpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnRcXG4reXQ5MjJ4X3BvcnRfY29uZmlnKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQsIHVuc2lnbmVkIGludCBtb2RlLFxcbitcXHRcXHQgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdGludCBhZGRyO1xcbitcXHR1MTYgZGF0YTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQocG9ydCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkpO1xcbitcXHRpZiAoYWRkciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRzd2l0Y2ggKGludGVyZmFjZSkge1xcbitcXHQvKiBTRVJERVMgKi9cXG4rXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XFxuK1xcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMEJBU0VYOlxcbitcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XFxuK1xcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDpcXG4rXFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTpcXG4rXFx0XFx0cmVzID0geXQ5MjJ4X3BvcnRfc2RzX2luaXQocHJpdiwgcG9ydCwgaW50ZXJmYWNlKTtcXG4rXFx0XFx0aWYgKHJlcylcXG4rXFx0XFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdFxcdGFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXRcXG4rXFx0XFx0XFx0KHBvcnQsIFlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQsXFxuK1xcdFxcdFxcdCBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSk7XFxuK1xcdFxcdGlmIChhZGRyIFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRcXHRyZXMgPSB5dDkyMnhfaW50aWZfZXh0X3JlYWQocHJpdiwgYWRkciwgWVQ5MjJYX1BPUlRfU0RTX01PREUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2ZGF0YSk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRcXHRkYXRhIFxcdTAwMjY9ICh+MHg3IFxcdTAwM2NcXHUwMDNjIDQpO1xcbitcXHRcXHRzd2l0Y2ggKGludGVyZmFjZSkge1xcbitcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcXG4rXFx0XFx0XFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV9TR01JSSk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDBCQVNFWDpcXG4rXFx0XFx0XFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV8xMDBCQVNFWCk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XFxuK1xcdFxcdFxcdGRhdGEgfD0gRklFTERfUFJFUChZVDkyMlhfUE9SVF9TRFNfTU9ERV9NLFxcbitcXHRcXHRcXHRcXHRcXHQgICBZVDkyWFhfU0VSREVTX01PREVfMTAwMEJBU0VYKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDpcXG4rXFx0XFx0XFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV8yNTAwQkFTRVgpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfVVNYR01JSTpcXG4rXFx0XFx0XFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV9VU1hHTUlJKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgWVQ5MjJYX1BPUlRfU0RTX01PREUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgZGF0YSk7XFxuK1xcdFxcdGlmIChyZXMpXFxuK1xcdFxcdFxcdHJldHVybiByZXM7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkXFxuK3l0OTIyeF9waHlsaW5rX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxcbitcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRwLVxcdTAwM2Vkcyk7XFxuK1xcdGludCBwb3J0ID0gZHAtXFx1MDAzZWluZGV4O1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXHRyZXMgPSB5dDkyMnhfcG9ydF9jb25maWcocHJpdiwgcG9ydCwgbW9kZSwgc3RhdGUtXFx1MDAzZWludGVyZmFjZSk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0ZGV2X2VycihkcC1cXHUwMDNlZHMtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxcXFxuXFxcIiwgXFxcImNvbmZpZ1xcXCIsXFxuK1xcdFxcdFxcdHBvcnQsIHJlcyk7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHl0OTIyeF9waHlsaW5rX21hY19vcHMgPSB7XFxuK1xcdC5tYWNfbGlua19kb3duXFx0PSB5dDkyMnhfcGh5bGlua19tYWNfbGlua19kb3duLFxcbitcXHQubWFjX2xpbmtfdXBcXHQ9IHl0OTIyeF9waHlsaW5rX21hY19saW5rX3VwLFxcbitcXHQubWFjX2NvbmZpZ1xcdD0geXQ5MjJ4X3BoeWxpbmtfbWFjX2NvbmZpZyxcXG4rfTtcXG4rXFxuK3N0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcXG4reXQ5MjJ4X2RzYV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuK1xcdFxcdFxcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcXG4re1xcbitcXHRyZXR1cm4gRFNBX1RBR19QUk9UT19ZVDkyMlg7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkXFxuK3l0OTIyeF9kc2FfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbitcXHRcXHRcXHQgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbitcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm8gPSBwcml2LVxcdTAwM2VpbmZvO1xcbitcXG4rXFx0Y29uZmlnLVxcdTAwM2VtYWNfY2FwYWJpbGl0aWVzID0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFIHxcXG4rXFx0XFx0XFx0XFx0ICAgTUFDXzEwIHwgTUFDXzEwMCB8IE1BQ18xMDAwO1xcbitcXG4rXFx0aWYgKGluZm8tXFx1MDAzZWludGVybmFsX21hc2sgXFx1MDAyNiBCSVQocG9ydCkpIHtcXG4rXFx0XFx0aWYgKHBvcnQgXFx1MDAzZT0gNCBcXHUwMDI2XFx1MDAyNiBwb3J0IFxcdTAwM2M9IDcpIHtcXG4rXFx0XFx0XFx0LyogcG9ydCA0IHRvIHBvcnQgNywgaW50ZXJuYWwgdXRwICovXFxuK1xcdFxcdFxcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwsXFxuK1xcdFxcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdFxcdFxcdGNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMEZEO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLFxcbitcXHRcXHRcXHRcXHQgIGNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbitcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMEJBU0VYLFxcbitcXHRcXHRcXHRcXHQgIGNvbmZpZy1cXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbitcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCxcXG4rXFx0XFx0XFx0XFx0ICBjb25maWctXFx1MDAzZXN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFx0XFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgsXFxuK1xcdFxcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdFxcdFxcdGNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMEZEO1xcbitcXHRcXHRcXHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUksXFxuK1xcdFxcdFxcdFxcdCAgY29uZmlnLVxcdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdFxcdFxcdGNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMjUwMEZEO1xcbitcXHRcXHRcXHRjb25maWctXFx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzUwMDBGRDtcXG4rXFx0XFx0XFx0Y29uZmlnLVxcdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwMEZEO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGV4dGVybmFsIHBvcnQgd2lsbCBhZGRlZCBsYXRlciAqL1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeXQ5MjJ4X3BvcnRfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydClcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuK1xcdHUzMiBtYXNrO1xcbitcXHR1MzIgY3RybDtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdC8qIGVuYWJsZSB1c2VyIHBvcnQgaXNvbGF0aW9uIGFuZCBkaXNhYmxlIGZkYiBsZWFybmluZyAqL1xcbitcXHRjdHJsID0gfnByaXYtXFx1MDAzZWNwdV9wb3J0c19tYXNrO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9QT1JUbl9JU09MQVRJT04ocG9ydCksIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0bWFzayA9IFlUOTIyWF9QT1JUX0xFQVJOX0RJUztcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfUE9SVG5fTEVBUk4ocG9ydCksIG1hc2spO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0aWYgKGRzYV9pc19jcHVfcG9ydChkcywgcG9ydCkpIHtcXG4rXFx0XFx0Y3RybCA9IH4odTMyKTA7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX1BPUlRuX0lTT0xBVElPTihwb3J0KSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGN0cmwpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0OTIyeF9kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbit7XFxuK1xcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0cmVzID0geXQ5MjJ4X3BvcnRfc2V0dXAocHJpdiwgcG9ydCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlcmVnX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJlcztcXG4rfVxcbitcXG4rc3RhdGljIGludCB5dDkyMnhfY2hpcF9kZXRlY3Qoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcXG4rXFx0Y29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvICppbmZvO1xcbitcXHR1MzIgY2hpcGlkO1xcbitcXHR1MzIgbWFqb3I7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfSUQsIFxcdTAwMjZjaGlwaWQpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRtYWpvciA9IEZJRUxEX0dFVChZVDkyMVhfQ0hJUF9JRF9NQUpPUiwgY2hpcGlkKTtcXG4rXFx0Zm9yIChpbmZvID0geXQ5MjF4X2luZm9zOyBpbmZvLVxcdTAwM2VuYW1lOyBpbmZvKyspXFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VtYWpvciA9PSBtYWpvcilcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdGlmICghaW5mby1cXHUwMDNlbmFtZSkge1xcbitcXHRcXHRkZXZfZXJyKGRldiwgXFxcIlVuZXhwZWN0ZWQgY2hpcGlkIDB4JXhcXFxcblxcXCIsIGNoaXBpZCk7XFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXHR9XFxuK1xcdHByaXYtXFx1MDAzZWluZm8gPSBpbmZvO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRyZXMgPSB5dDkyMnhfY2hpcF9kZXRlY3QocHJpdik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHQvKiBSZXNldCAqL1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9SU1QsIFlUOTIxWF9SU1RfSFcpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0ZnNsZWVwKFlUOTIxWF9SU1RfREVMQVlfVVMpO1xcbitcXG4rXFx0dmFsID0gMDtcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ193YWl0KHByaXYsIFlUOTIxWF9SU1QsIH4wLCBcXHUwMDI2dmFsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0OTIyeF9jaGlwX3NldHVwX2RzYShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBjcHVfcG9ydHNfbWFzaztcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdGludCBwb3J0O1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0Y3RybCA9IEdFTk1BU0soOSwgMCk7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0ZJTFRFUl9VTktfVUNBU1QsIGN0cmwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0Y3RybCA9IDA7XFxuK1xcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgcHJpdi1cXHUwMDNlY2hpcF9pbmZvLVxcdTAwM2Vwb3J0czsgaSsrKVxcbitcXHRcXHRjdHJsIHw9IFlUOTIyWF9BQ1RfVU5LX0FDVG5fVFJBUChpKTtcXG4rXFx0Y3B1X3BvcnRzX21hc2sgPSBwcml2LVxcdTAwM2VjcHVfcG9ydHNfbWFzaztcXG4rXFx0Zm9yX2VhY2hfc2V0X2JpdChwb3J0LCBcXHUwMDI2Y3B1X3BvcnRzX21hc2ssIHByaXYtXFx1MDAzZWNoaXBfaW5mby1cXHUwMDNlcG9ydHMpIHtcXG4rXFx0XFx0Y3RybCBcXHUwMDI2PSB+WVQ5MjJYX0FDVF9VTktfQUNUbl9NKHBvcnQpO1xcbitcXHRcXHRjdHJsIHw9IFlUOTIyWF9BQ1RfVU5LX0FDVG5fRFJPUChwb3J0KTtcXG4rXFx0fVxcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9BQ1RfVU5LX1VDQVNULCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQUNUX1VOS19NQ0FTVCwgY3RybCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB5dDkyMnhfY2hpcF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRjdHJsID0gWVQ5MjJYX0ZVTkNfTUlCIHwgWVQ5MjJYX0ZVTkNfQUNMO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIxWF9GVU5DLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHJlcyA9IHl0OTIyeF9jaGlwX3NldHVwX2RzYShwcml2KTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0OTIyeF9jcHVfdGFnX21vZGVfc2V0KHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHUxNiBldGhfcF90YWc7XFxuK1xcdHUzMiB2YWw7XFxuK1xcdHUzMiB2YWwxO1xcbitcXHRpbnQgcmVzO1xcbitcXG4rXFx0LyogY3B1IHRhZyBtb2RlIHNldCAqL1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjJYX0NQVV9UQUdfUlhfQ1RSTCwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfcmVhZChwcml2LCBZVDkyMlhfQ1BVX1RBR19UWF9DVFJMLCBcXHUwMDI2dmFsMSk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdHZhbCBcXHUwMDI2PSB+WVQ5MjJYX0NQVV9UQUdfUlhfTU9ERTtcXG4rXFx0dmFsMSBcXHUwMDI2PSB+WVQ5MjJYX0NQVV9UQUdfVFhfTU9ERTtcXG4rXFx0dmFsMSBcXHUwMDI2PSB+WVQ5MjJYX0NQVV9UQUdfVFhfVFlQRTtcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQ1BVX1RBR19SWF9DVFJMLCB2YWwpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9DUFVfVEFHX1RYX0NUUkwsIHZhbDEpO1xcbitcXHRpZiAocmVzKVxcbitcXHRcXHRyZXR1cm4gcmVzO1xcbitcXG4rXFx0LyogdHBpZCBjaGVjayAqL1xcbitcXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NQVV9UQUdfVFBJRCwgXFx1MDAyNnZhbCk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcdGV0aF9wX3RhZyA9IEZJRUxEX0dFVChZVDkyMVhfQ1BVX1RBR19UUElEX1RQSURfTSwgdmFsKTtcXG4rXFx0aWYgKGV0aF9wX3RhZyAhPSBFVEhfUF9ZVDkyMVgpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJUYWcgdHlwZSAweCV4ICE9IDB4JXhcXFxcblxcXCIsIGV0aF9wX3RhZyxcXG4rXFx0XFx0XFx0RVRIX1BfWVQ5MjFYKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0OTIyeF9jcHVfcG9ydF9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxcbit7XFxuK1xcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFxcdTAwMjZwcml2LVxcdTAwM2VkcztcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHQvKiBjcHUgdGFnIG1vZGUgKi9cXG4rXFx0cmVzID0geXQ5MjJ4X2NwdV90YWdfbW9kZV9zZXQocHJpdik7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHQvKiBFbmFibGUgRFNBICovXFxuK1xcdHByaXYtXFx1MDAzZWNwdV9wb3J0c19tYXNrID0gZHNhX2NwdV9wb3J0cyhkcyk7XFxuK1xcdGN0cmwgPSBZVDkyMVhfRVhUX0NQVV9QT1JUX1RBR19FTiB8IFlUOTIxWF9FWFRfQ1BVX1BPUlRfUE9SVF9FTiB8XFxuK1xcdCAgICAgICBZVDkyMVhfRVhUX0NQVV9QT1JUX1BPUlQoX19mZnMocHJpdi1cXHUwMDNlY3B1X3BvcnRzX21hc2spKTtcXG4rXFx0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfRVhUX0NQVV9QT1JULCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdC8qIFNldHVwIHNvZnR3YXJlIHN3aXRjaCAqL1xcbitcXHRjdHJsID0gWVQ5MjJYX0NQVV9DT1BZX1RPX0VYVF9DUFU7XFxuK1xcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0NQVV9DT1BZLCBjdHJsKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHJldHVybiByZXM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeXQ5MjJ4X2RzYV9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHMpO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtXFx1MDAzZW9mX25vZGU7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7XFxuK1xcdGludCByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIyeF9jaGlwX3Jlc2V0KHByaXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdC8qIFJlZ2lzdGVyIHRoZSBpbnRlcm5hbCBtZGlvIGJ1cy4gKi9cXG4rXFx0Y2hpbGQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShucCwgXFxcIm1kaW9cXFwiKTtcXG4rXFx0aWYgKGNoaWxkKSB7XFxuK1xcdFxcdHJlcyA9IHl0OTIxeF9tYnVzX2ludF9pbml0KHByaXYsIGNoaWxkKTtcXG4rXFx0XFx0b2Zfbm9kZV9wdXQoY2hpbGQpO1xcbitcXHRcXHRpZiAocmVzKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVzO1xcbitcXHR9XFxuK1xcbitcXHQgLyogY3B1IHBvcnQgc2V0ICovXFxuK1xcdCBtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdCByZXMgPSB5dDkyMnhfY3B1X3BvcnRfc2V0KHByaXYpO1xcbitcXHQgbXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdGlmIChyZXMpXFxuK1xcdFxcdHJldHVybiByZXM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VyZWdfbG9jayk7XFxuK1xcdHJlcyA9IHl0OTIyeF9jaGlwX3NldHVwKHByaXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFx0aWYgKHJlcylcXG4rXFx0XFx0cmV0dXJuIHJlcztcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHl0OTIyeF9kc2Ffc3dpdGNoX29wcyA9IHtcXG4rXFx0LyogcG9ydCAqL1xcbitcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0geXQ5MjJ4X2RzYV9nZXRfdGFnX3Byb3RvY29sLFxcbitcXHQucGh5bGlua19nZXRfY2Fwc1xcdD0geXQ5MjJ4X2RzYV9waHlsaW5rX2dldF9jYXBzLFxcbitcXHQucG9ydF9zZXR1cFxcdFxcdD0geXQ5MjJ4X2RzYV9wb3J0X3NldHVwLFxcbitcXHQvKiBjaGlwICovXFxuK1xcdC5zZXR1cFxcdFxcdFxcdD0geXQ5MjJ4X2RzYV9zZXR1cCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5Mnh4X2NoaXBfaW5mbyB5dDkyeHhfY2hpcF9pbmZvX3RhYmxlW10gPSB7XFxuK1xcdFtZVDkyMTVdID0ge1xcbitcXHRcXHQubW9kZSA9IFlUOTIxNSxcXG4rXFx0XFx0Lm5hbWUgPSBcXFwibW90b3Jjb21tIHl0OTIxNVxcXCIsXFxuK1xcdFxcdC5wb3J0cyA9IFlUOTIxWF9QT1JUX05VTSxcXG4rXFx0XFx0LmxhZ19pZCA9IFlUOTIxWF9MQUdfTlVNLFxcbitcXHRcXHQuYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDAsXFxuK1xcdFxcdC5hZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMCxcXG4rXFx0XFx0LnN3aXRjaF9vcHMgPSBcXHUwMDI2eXQ5MjF4X2RzYV9zd2l0Y2hfb3BzLFxcbitcXHRcXHQubWFjX29wcyA9IFxcdTAwMjZ5dDkyMXhfcGh5bGlua19tYWNfb3BzLFxcbitcXHR9LFxcbitcXHRbWVQ5MjI0XSA9IHtcXG4rXFx0XFx0Lm1vZGUgPSBZVDkyMjQsXFxuK1xcdFxcdC5uYW1lID0gXFxcIm1vdG9yY29tbSB5dDkyMjRcXFwiLFxcbitcXHRcXHQucG9ydHMgPSBZVDkyMlhfUE9SVF9OVU0sXFxuK1xcdFxcdC5sYWdfaWQgPSBZVDkyMlhfTEFHX05VTSxcXG4rXFx0XFx0LmFnZWluZ190aW1lX21pbiA9IDEgKiA2MDAwLFxcbitcXHRcXHQuYWdlaW5nX3RpbWVfbWF4ID0gVTE2X01BWCAqIDYwMDAsXFxuK1xcdFxcdC5zd2l0Y2hfb3BzID0gXFx1MDAyNnl0OTIyeF9kc2Ffc3dpdGNoX29wcyxcXG4rXFx0XFx0Lm1hY19vcHMgPSBcXHUwMDI2eXQ5MjJ4X3BoeWxpbmtfbWFjX29wcyxcXG4rXFx0fSxcXG4rfTtcXG4rXFxuK3N0YXRpYyB2b2lkIHl0OTJ4eF9tZGlvX3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpO1xcbitcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRkc2Ffc3dpdGNoX3NodXRkb3duKFxcdTAwMjZwcml2LVxcdTAwM2Vkcyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHl0OTJ4eF9tZGlvX3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcXG4rXFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlcG9ydHMpOyBpLS0gXFx1MDAzZSAwOyApIHtcXG4rXFx0XFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXTtcXG4rXFxuK1xcdFxcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNnBwLVxcdTAwM2VtaWJfcmVhZCk7XFxuK1xcdH1cXG4rXFxuK1xcdGRzYV91bnJlZ2lzdGVyX3N3aXRjaChcXHUwMDI2cHJpdi1cXHUwMDNlZHMpO1xcbitcXG4rXFx0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZWFjbF9ibGtzKTsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCB5dDkyMXhfYWNsX2JsayAqYWNsYmxrID0gcHJpdi1cXHUwMDNlYWNsX2Jsa3NbaV07XFxuK1xcbitcXHRcXHRpZiAoIWFjbGJsaylcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIFxcdTAwM2MgQVJSQVlfU0laRShhY2xibGstXFx1MDAzZXJ1bGVzKTsgaisrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB5dDkyMXhfYWNsX3J1bGUgKmFjbHJ1bGUgPSBhY2xibGstXFx1MDAzZXJ1bGVzW2pdO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFhY2xydWxlKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0XFx0a3ZmcmVlKGFjbHJ1bGUpO1xcbitcXHRcXHR9XFxuK1xcdFxcdGt2ZnJlZShhY2xibGspO1xcbitcXHR9XFxuK1xcdG11dGV4X2Rlc3Ryb3koXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB5dDkyeHhfbWRpb19wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuK3tcXG4rXFx0Y29uc3Qgc3RydWN0IHl0OTJ4eF9jaGlwX2luZm8gKmNvbXBhdF9pbmZvID0gTlVMTDtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG4rXFx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcXG4rXFx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2O1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XFxuK1xcbitcXHRjb21wYXRfaW5mbyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xcbitcXHRpZiAoIWNvbXBhdF9pbmZvKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFwcml2KVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdG1kaW8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1kaW8pLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFtZGlvKVxcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFxuK1xcdG1kaW8tXFx1MDAzZWJ1cyA9IG1kaW9kZXYtXFx1MDAzZWJ1cztcXG4rXFx0bWRpby1cXHUwMDNlYWRkciA9IG1kaW9kZXYtXFx1MDAzZWFkZHI7XFxuK1xcdG1kaW8tXFx1MDAzZXN3aXRjaGlkID0gMDtcXG4rXFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXJlZ19sb2NrKTtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZWNoaXBfaW5mbyA9IGNvbXBhdF9pbmZvO1xcbitcXHRwcml2LVxcdTAwM2VyZWdfb3BzID0gXFx1MDAyNnl0OTIxeF9yZWdfb3BzX21kaW87XFxuK1xcdHByaXYtXFx1MDAzZXJlZ19jdHggPSBtZGlvO1xcbitcXG4rXFx0ZHMgPSBcXHUwMDI2cHJpdi1cXHUwMDNlZHM7XFxuK1xcdGRzLVxcdTAwM2VkZXYgPSBkZXY7XFxuK1xcdGRzLVxcdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XFxuK1xcdGRzLVxcdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xcbitcXHRkcy1cXHUwMDNlcHJpdiA9IHByaXY7XFxuK1xcdGRzLVxcdTAwM2VvcHMgPSBjb21wYXRfaW5mby1cXHUwMDNlc3dpdGNoX29wcztcXG4rXFx0ZHMtXFx1MDAzZWFnZWluZ190aW1lX21pbiA9IGNvbXBhdF9pbmZvLVxcdTAwM2VhZ2VpbmdfdGltZV9taW47XFxuK1xcdGRzLVxcdTAwM2VhZ2VpbmdfdGltZV9tYXggPSBjb21wYXRfaW5mby1cXHUwMDNlYWdlaW5nX3RpbWVfbWF4O1xcbitcXHRkcy1cXHUwMDNlcGh5bGlua19tYWNfb3BzID0gY29tcGF0X2luZm8tXFx1MDAzZW1hY19vcHM7XFxuK1xcdGRzLVxcdTAwM2VudW1fbGFnX2lkcyA9IGNvbXBhdF9pbmZvLVxcdTAwM2VsYWdfaWQ7XFxuK1xcdGRzLVxcdTAwM2VudW1fcG9ydHMgPSBjb21wYXRfaW5mby1cXHUwMDNlcG9ydHM7XFxuK1xcbitcXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIHByaXYpO1xcbitcXG4rXFx0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyeHhfb2ZfbWF0Y2hbXSA9IHtcXG4rXFx0e1xcbitcXHRcXHQuY29tcGF0aWJsZSA9IFxcXCJtb3RvcmNvbW0seXQ5MjE1XFxcIixcXG4rXFx0XFx0LmRhdGEgPSBcXHUwMDI2eXQ5Mnh4X2NoaXBfaW5mb190YWJsZVtZVDkyMTVdLFxcbitcXHR9LFxcbitcXHR7XFxuK1xcdFxcdC5jb21wYXRpYmxlID0gXFxcIm1vdG9yY29tbSx5dDkyMjRcXFwiLFxcbitcXHRcXHQuZGF0YSA9IFxcdTAwMjZ5dDkyeHhfY2hpcF9pbmZvX3RhYmxlW1lUOTIyNF0sXFxuK1xcdH0sXFxuIFxcdHt9XFxuIH07XFxuLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTIxeF9vZl9tYXRjaCk7XFxuK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHl0OTJ4eF9vZl9tYXRjaCk7XFxuIFxcbi1zdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTIxeF9tZGlvX2RyaXZlciA9IHtcXG4tXFx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXFxuLVxcdC5yZW1vdmUgPSB5dDkyMXhfbWRpb19yZW1vdmUsXFxuLVxcdC5zaHV0ZG93biA9IHl0OTIxeF9tZGlvX3NodXRkb3duLFxcbitzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIHl0OTJ4eF9tZGlvX2RyaXZlciA9IHtcXG4rXFx0LnByb2JlID0geXQ5Mnh4X21kaW9fcHJvYmUsXFxuK1xcdC5yZW1vdmUgPSB5dDkyeHhfbWRpb19yZW1vdmUsXFxuK1xcdC5zaHV0ZG93biA9IHl0OTJ4eF9tZGlvX3NodXRkb3duLFxcbiBcXHQubWRpb2Rydi5kcml2ZXIgPSB7XFxuLVxcdFxcdC5uYW1lID0gWVQ5MjFYX05BTUUsXFxuLVxcdFxcdC5vZl9tYXRjaF90YWJsZSA9IHl0OTIxeF9vZl9tYXRjaCxcXG4rXFx0XFx0Lm5hbWUgPSBZVDkyWFhfTkFNRSxcXG4rXFx0XFx0Lm9mX21hdGNoX3RhYmxlID0geXQ5Mnh4X29mX21hdGNoLFxcbiBcXHR9LFxcbiB9O1xcbiBcXG4tbWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XFxuK21kaW9fbW9kdWxlX2RyaXZlcih5dDkyeHhfbWRpb19kcml2ZXIpO1xcbiBcXG4gTU9EVUxFX0FVVEhPUihcXFwiRGF2aWQgWWFuZyBcXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXFx1MDAzZVxcXCIpO1xcbi1NT0RVTEVfREVTQ1JJUFRJT04oXFxcIkRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBTd2l0Y2hcXFwiKTtcXG4rTU9EVUxFX0FVVEhPUihcXFwiS3lsZSBTd2l0Y2ggXFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXFx1MDAzZVxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBhbmQgWVQ5MjJ4IFN3aXRjaFxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaCBiL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxcbmluZGV4IDVmM2I5OWUxODljNDEuLjAzMDhlNmI5MTYxOGUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5oXFxuQEAgLTgzNyw2ICs4MzcsNyBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcXG4gXFxuICNkZWZpbmUgWVQ5MjE1X01BSk9SXFx0MHg5MDAyXFxuICNkZWZpbmUgWVQ5MjE4X01BSk9SXFx0MHg5MDAxXFxuKyNkZWZpbmUgWVQ5MjI0X01BSk9SXFx0MHg5MDA0XFxuIFxcbiAvKiByZXF1aXJlZCBmb3IgYSBoYXJkIHJlc2V0ICovXFxuICNkZWZpbmUgWVQ5MjFYX1JTVF9ERUxBWV9VU1xcdDEwMDAwXFxuQEAgLTg1Myw2ICs4NTQsOTYgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XFxuIC8qIDggaW50ZXJuYWwgKyAyIGV4dGVybmFsICsgMSBtY3UgKi9cXG4gI2RlZmluZSBZVDkyMVhfUE9SVF9OVU1cXHRcXHRcXHQxMVxcbiBcXG4rLyogeXQ5MjJ4IHJlZ2lzdGVyIGxpc3RzICovXFxuKyNkZWZpbmUgWVQ5MlhYX1BBR0VfU0VMRUNUXFx0MHgxZVxcbisjZGVmaW5lIFlUOTJYWF9QQUdFXFx0XFx0MHgxZlxcbisjZGVmaW5lIFlUOTIyWF9QT1JUbl9DVFJMKHBvcnQpICAgICAgICAgICAgICAgICgweDgwMDgwICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9DVFJMX1BBVVNFX0FOICAgICAgQklUKDEwKVxcbisjZGVmaW5lIFlUOTIyWF9QT1JUbl9TVEFUVVMocG9ydCkgICAgICAoMHg4MDIwMCArIDQgKiAocG9ydCkpXFxuKyNkZWZpbmUgWVQ5MjJYX0VOX1BIWV9PVkVSV1JJVEUgICAoMHg4MDA0MClcXG4rI2RlZmluZSBZVDkyMlhfRU5fUEhZX1ZBTFVFICAgICAgICgweDgwMDNjKVxcbisvKiBDVFJMOiBmb3JjZSBvcCB0byBtYWtlIHNvZnQgY29uZmlndXJhdGlvbiBlZmZlY3RpdmUgKi9cXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9GT1JDRV9PUCAgICAgICAgICAgQklUKDE0KVxcbisjZGVmaW5lIFlUOTIyWF9QT1JUX0NGR19UWF9FTiAgICAgICBCSVQoMTMpXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfQ0ZHX1JYX0VOICAgICAgIEJJVCgxMilcXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9GQ19BTiAgICAgICAgICAgIEJJVCgxMSlcXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9MSU5LX0FOICAgICAgICAgICAgQklUKDEwKSAgLyogQ1RSTDogYXV0byBuZWdvdGlhdGlvbiAqL1xcbisjZGVmaW5lIFlUOTIyWF9QT1JUX0xJTksgICAgICAgICAgICAgICBCSVQoOSkgIC8qIENUUkw6IGxpbmsgc3RhdHVzICovXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfSEFMRl9QQVVTRSAgICAgICAgIEJJVCg4KSAgLyogSGFsZi1kdXBsZXggYmFjayBwcmVzc3VyZSBtb2RlICovXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfRFVQTEVYX0ZVTEwgICAgICAgICAgICAgICAgQklUKDcpXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfUlhfUEFVU0UgICAgICAgICAgIEJJVCg2KVxcbisjZGVmaW5lIFlUOTIyWF9QT1JUX1RYX1BBVVNFICAgICAgICAgICBCSVQoNSlcXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9SWF9NQUNfRU4gICAgICAgICAgQklUKDQpXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfVFhfTUFDX0VOICAgICAgICAgIEJJVCgzKVxcbisjZGVmaW5lIFlUOTIyWF9QT1JUX1NQRUVEX00gICAgICAgICAgICBHRU5NQVNLKDIsIDApXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfU0RTX01PREUgICAgICAgICAgIDB4NDAwXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfU0RTX01PREVfTSAgICAgICAgIEdFTk1BU0soNiwgNClcXG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfU0dNSUkgICAgICAgICAgICAgICAgICAgICAgIDBcXG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfUkVWU0dNSUkgICAgICAgICAgICAgICAgICAgIDFcXG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfMTAwMEJBU0VYICAgICAgICAgICAgICAgICAgIDJcXG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfMTAwQkFTRVggICAgICAgICAgICAgICAgICAgIDNcXG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfMjUwMEJBU0VYICAgICAgICAgICAgICAgICAgIDRcXG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfVVNYR01JSSAgICAgICAgICAgICAgICAgICAgIDZcXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9OVU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOVxcbisvKiBMQUcgKi9cXG4rI2RlZmluZSBZVDkyMlhfTEFHX05VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDRcXG4rLyogSVNPICovXFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRuX0lTT0xBVElPTihwb3J0KSAgICAgICAgICAgKDB4NCAqIChwb3J0KSArIDB4MTgwZDgwKVxcbisvKiBGREIgKi9cXG4rI2RlZmluZSBZVDkyMlhfUE9SVG5fTEVBUk4ocG9ydCkgICAgICAgKDB4MTgwMzAwICsgNCAqIChwb3J0KSlcXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9MRUFSTl9ESVMgICAgICAgICAgQklUKDE4KVxcbisvKiBHTE9CQUwgQ1RSTCAqL1xcbisjZGVmaW5lICBZVDkyMlhfRlVOQ19BQ0wgICAgICAgICAgICAgICBCSVQoNSlcXG4rI2RlZmluZSAgWVQ5MjJYX0ZVTkNfTUlCICAgICAgICAgICAgICAgQklUKDQpXFxuKy8qIENUUkwgUEtUICovXFxuKyNkZWZpbmUgWVQ5MjJYX0ZJTFRFUl9VTktfVUNBU1QgICAgICAgICAgICAgICAgICAgICAgICAweDE4MGVjOFxcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX1VDQVNUICAgICAgICAgICAgICAgICAgIDB4MTgwZWQ4XFxuKyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfTUNBU1QgICAgICAgICAgICAgICAgICAgMHgxODBlZTBcXG4rI2RlZmluZSBZVDkyMlhfQUNUX1VOS19NQ0FTVF9CWVBBU1NfRFJPUF9QSU0gICBCSVQoMjIpXFxuKyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfTUNBU1RfQllQQVNTX0RST1BfTUxEICAgQklUKDIxKVxcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX01DQVNUX0JZUEFTU19EUk9QX0lHTVAgIEJJVCgyMClcXG4rI2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX00ocG9ydCkgICAgICAgICAgICBHRU5NQVNLKDIgKiAocG9ydCkgKyAxLCAyICogKHBvcnQpKVxcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX0FDVG4ocG9ydCwgeCkgICAgICAgICAgICgoeCkgXFx1MDAzY1xcdTAwM2MgKDIgKiAocG9ydCkpKVxcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX0FDVG5fRk9SV0FSRChwb3J0KSAgICAgIFlUOTIyWF9BQ1RfVU5LX0FDVG4ocG9ydCwgMCkgIC8qIGZsb29kICovXFxuKyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfQUNUbl9UUkFQKHBvcnQpICAgICAgICAgWVQ5MjJYX0FDVF9VTktfQUNUbihwb3J0LCAzKSAgLyogc3RlZXIgdG8gQ1BVICovXFxuKyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfQUNUbl9EUk9QKHBvcnQpICAgICAgICAgWVQ5MjJYX0FDVF9VTktfQUNUbihwb3J0LCAxKSAgLyogZGlzY2FyZCAqL1xcbisvKiBORVZFUiB1c2UgdGhpcyBhY3Rpb247IHNlZSBjb21tZW50cyBpbiB0aGUgdGFnIGRyaXZlciAqL1xcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX0FDVG5fQ09QWShwb3J0KSAgICAgICAgIFlUOTIyWF9BQ1RfVU5LX0FDVG4ocG9ydCwgMikgIC8qIGZsb29kIGFuZCBjb3B5ICovXFxuK1xcbisvKiBDUFUgUE9SVCAqL1xcbisjZGVmaW5lIFlUOTIyWF9DUFVfQ09QWVxcdFxcdFxcdDB4MTgxMTAwXFxuKyNkZWZpbmUgWVQ5MjJYX0NQVV9DT1BZX1RPX0lOVF9DUFVcXHRCSVQoMSlcXG4rI2RlZmluZSBZVDkyMlhfQ1BVX0NPUFlfVE9fRVhUX0NQVVxcdEJJVCgwKVxcbisjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1JYX0NUUkxcXHRcXHQweDgwNTA0XFxuKyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfUlhfTU9ERVxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1RYX0NUUkxcXHRcXHQweDEwMDcxMFxcbisjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1RYX1RZUEVcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDkyMlhfQ1BVX1RBR19UWF9NT0RFXFx0XFx0QklUKDEpXFxuKyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfQ1RBR19PUFxcdEJJVCgyKVxcbisjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1RYX1NUQUdfT1BcXHRCSVQoMylcXG4rXFxuK2VudW0geXQ5MjJ4X3BoeV9yZWdfdHlwZSB7XFxuK1xcdFlUOTIyWF9QSFlfUkVHX1RZUEVfQ09NTU9OX0VYVCxcXG4rXFx0WVQ5MjJYX1BIWV9SRUdfVFlQRV9QSFlfQ09NTU9OX0VYVCxcXG4rXFx0WVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVCxcXG4rXFx0WVQ5MjJYX1BIWV9SRUdfVFlQRV9NSUksXFxuK1xcdFlUOTIyWF9QSFlfUkVHX1RZUEVfRVhULFxcbitcXHRZVDkyMlhfUEhZX1JFR19UWVBFX01NRDEsXFxuK1xcdFlUOTIyWF9QSFlfUkVHX1RZUEVfTU1EMyxcXG4rXFx0WVQ5MjJYX1BIWV9SRUdfVFlQRV9NTUQ3LFxcbitcXHRZVDkyMlhfUEhZX1JFR19UWVBFX01BWFxcbit9O1xcbitcXG4rZW51bSB5dDkyMnhfcGh5X3JlZ19zcGFjZSB7XFxuK1xcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1BIWSxcXG4rXFx0WVQ5MjJYX1BIWV9SRUdfU1BBQ0VfUEhZX1QxLFxcbitcXHRZVDkyMlhfUEhZX1JFR19TUEFDRV9QSFlfTERTLFxcbitcXHRZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSxcXG4rXFx0WVQ5MjJYX1BIWV9SRUdfU1BBQ0VfVVNYR01JSSxcXG4rXFx0WVQ5MjJYX1BIWV9SRUdfU1BBQ0VfUVNHTUlJLFxcbitcXHRZVDkyMlhfUEhZX1JFR19TUEFDRV9NQVhcXG4rfTtcXG4rXFxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcXHUwMDNjIDgpXFxuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfZXh0ZXJuYWwocG9ydCkgKChwb3J0KSA9PSA4IHx8IChwb3J0KSA9PSA5KVxcbiBcXG5AQCAtOTQ1LDkgKzEwMzYsMjYgQEAgc3RydWN0IHl0OTIxeF9yZWdfb3BzIHtcXG4gXFx0aW50ICgqd3JpdGUpKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiB2YWwpO1xcbiB9O1xcbiBcXG4rZW51bSB5dDkyeHhfbW9kZSB7XFxuK1xcdFlUOTIxNSxcXG4rXFx0WVQ5MjI0LFxcbit9O1xcbitcXG4rc3RydWN0IHl0OTJ4eF9jaGlwX2luZm8ge1xcbitcXHRlbnVtIHl0OTJ4eF9tb2RlIG1vZGU7XFxuK1xcdGNvbnN0IGNoYXIgKm5hbWU7XFxuK1xcdHVuc2lnbmVkIGludCBwb3J0cztcXG4rXFx0dW5zaWduZWQgaW50IGxhZ19pZDtcXG4rXFx0dW5zaWduZWQgaW50IGFnZWluZ190aW1lX21pbjtcXG4rXFx0dW5zaWduZWQgaW50IGFnZWluZ190aW1lX21heDtcXG4rXFx0Y29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzICpzd2l0Y2hfb3BzO1xcbitcXHRjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzICptYWNfb3BzO1xcbit9O1xcbitcXG4gc3RydWN0IHl0OTIxeF9wcml2IHtcXG4gXFx0c3RydWN0IGRzYV9zd2l0Y2ggZHM7XFxuIFxcbitcXHRjb25zdCBzdHJ1Y3QgeXQ5Mnh4X2NoaXBfaW5mbyAqY2hpcF9pbmZvO1xcbiBcXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm87XFxuIFxcdHVuc2lnbmVkIGludCBtZXRlcl9zbG90X25zO1xcbiBcXHR1bnNpZ25lZCBpbnQgcG9ydF9zaGFwZV9zbG90X25zO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXFxuaW5kZXggNmY3ZjVjMTdiNTMyMC4uMGMwMzNjYTY1YjkyMyAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL25ldC9kc2EuaFxcbisrKyBiL2luY2x1ZGUvbmV0L2RzYS5oXFxuQEAgLTYwLDYgKzYwLDcgQEAgc3RydWN0IHRjX2FjdGlvbjtcXG4gI2RlZmluZSBEU0FfVEFHX1BST1RPX01YTDg2Ml9WQUxVRVxcdFxcdDMyXFxuICNkZWZpbmUgRFNBX1RBR19QUk9UT19ORVRDX1ZBTFVFXFx0XFx0MzNcXG4gI2RlZmluZSBEU0FfVEFHX1BST1RPX0tTWjg0NjNfVkFMVUVcXHRcXHQzNFxcbisjZGVmaW5lIERTQV9UQUdfUFJPVE9fWVQ5MjJYX1ZBTFVFICAgICAgICAgICAgICAzNVxcbiBcXG4gZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcXG4gXFx0RFNBX1RBR19QUk9UT19OT05FXFx0XFx0PSBEU0FfVEFHX1BST1RPX05PTkVfVkFMVUUsXFxuQEAgLTk3LDYgKzk4LDcgQEAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcXG4gXFx0RFNBX1RBR19QUk9UT19NWEw4NjJcXHRcXHQ9IERTQV9UQUdfUFJPVE9fTVhMODYyX1ZBTFVFLFxcbiBcXHREU0FfVEFHX1BST1RPX05FVENcXHRcXHQ9IERTQV9UQUdfUFJPVE9fTkVUQ19WQUxVRSxcXG4gXFx0RFNBX1RBR19QUk9UT19LU1o4NDYzXFx0XFx0PSBEU0FfVEFHX1BST1RPX0tTWjg0NjNfVkFMVUUsXFxuK1xcdERTQV9UQUdfUFJPVE9fWVQ5MjJYXFx0XFx0PSBEU0FfVEFHX1BST1RPX1lUOTIyWF9WQUxVRSxcXG4gfTtcXG4gXFxuIHN0cnVjdCBkc2Ffc3dpdGNoO1xcbmRpZmYgLS1naXQgYS9uZXQvZHNhL0tjb25maWcgYi9uZXQvZHNhL0tjb25maWdcXG5pbmRleCBkNWU3MjViOTBkNzg1Li5lNGZkM2E5YTY2MjExIDEwMDY0NFxcbi0tLSBhL25ldC9kc2EvS2NvbmZpZ1xcbisrKyBiL25ldC9kc2EvS2NvbmZpZ1xcbkBAIC0yMTUsMTAgKzIxNSwxMCBAQCBjb25maWcgTkVUX0RTQV9UQUdfWFJTNzAwWFxcbiBcXHQgIFNheSBZIG9yIE0gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRhZ2dpbmcgZnJhbWVzIGZvclxcbiBcXHQgIEFycm93IFNwZWVkQ2hpcHMgWFJTNzAweCBzd2l0Y2hlcyB0aGF0IHVzZSBhIHNpbmdsZSBieXRlIHRhZyB0cmFpbGVyLlxcbiBcXG4tY29uZmlnIE5FVF9EU0FfVEFHX1lUOTIxWFxcbi1cXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlc1xcXCJcXG4rY29uZmlnIE5FVF9EU0FfVEFHX1lUOTJYWFxcbitcXHR0cmlzdGF0ZSBcXFwiVGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBhbmQgWVQ5MjJ4IHN3aXRjaGVzXFxcIlxcbiBcXHRoZWxwXFxuIFxcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yXFxuLVxcdCAgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlcy5cXG4rXFx0ICBNb3RvcmNvbW0gWVQ5MjF4IGFuZCBZVDkyMnggc3dpdGNoZXMuXFxuIFxcbiBlbmRpZlxcbmRpZmYgLS1naXQgYS9uZXQvZHNhL01ha2VmaWxlIGIvbmV0L2RzYS9NYWtlZmlsZVxcbmluZGV4IGI4YzI2NjdjZDE0YWEuLjJkNzJhMjVmZDk4NDYgMTAwNjQ0XFxuLS0tIGEvbmV0L2RzYS9NYWtlZmlsZVxcbisrKyBiL25ldC9kc2EvTWFrZWZpbGVcXG5AQCAtNDIsNyArNDIsNyBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfU0pBMTEwNSkgKz0gdGFnX3NqYTExMDUub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfVFJBSUxFUikgKz0gdGFnX3RyYWlsZXIub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfVlNDNzNYWF84MDIxUSkgKz0gdGFnX3ZzYzczeHhfODAyMXEub1xcbiBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfWFJTNzAwWCkgKz0gdGFnX3hyczcwMHgub1xcbi1vYmotJChDT05GSUdfTkVUX0RTQV9UQUdfWVQ5MjFYKSArPSB0YWdfeXQ5MjF4Lm9cXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1lUOTJYWCkgKz0gdGFnX3l0OTIxeC5vXFxuIFxcbiAjIGZvciB0cmFjaW5nIGZyYW1ld29yayB0byBmaW5kIHRyYWNlLmhcXG4gQ0ZMQUdTX3RyYWNlLm8gOj0gLUkkKHNyYylcXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfeXQ5MjF4LmMgYi9uZXQvZHNhL3RhZ195dDkyMXguY1xcbmluZGV4IDI5NDc4NGFiNjY5NGIuLmEzMDEyZWMzOTg2ODYgMTAwNjQ0XFxuLS0tIGEvbmV0L2RzYS90YWdfeXQ5MjF4LmNcXG4rKysgYi9uZXQvZHNhL3RhZ195dDkyMXguY1xcbkBAIC0xLDggKzEsMTAgQEBcXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gLypcXG4gICogTW90b3Jjb21tIFlUOTIxeCBTd2l0Y2ggRXh0ZW5kZWQgQ1BVIFBvcnQgVGFnZ2luZ1xcbisgKiBNb3RvcmNvbW0gWVQ5MjJ4IFN3aXRjaCBFeHRlbmRlZCBDUFUgUG9ydCBUYWdnaW5nXFxuICAqXFxuICAqIENvcHlyaWdodCAoYykgMjAyNSBEYXZpZCBZYW5nIFxcdTAwM2NtbXlhbmdmbEBnbWFpbC5jb21cXHUwMDNlXFxuKyAqIENvcHlyaWdodCAoYykgMjAyNiBLeWxlIHN3aXRjaCBcXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuICAqXFxuICAqICstLS0tKy0tLS0rLS0tLS0tLSstLS0tLSstLS0tKy0tLS0tLS0tLVxcbiAgKiB8IERBIHwgU0EgfCBUYWdFVCB8IFRhZyB8IEVUIHwgUGF5bG9hZCAuLi5cXG5AQCAtMTY2LDggKzE2OCwxMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2FfZGV2aWNlX29wcyB5dDkyMXhfbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5lZWRlZF9oZWFkcm9vbSA9IFlUOTIxWF9UQUdfTEVOLFxcbiB9O1xcbiBcXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJEU0EgdGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlc1xcXCIpO1xcbi1NT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuK0RTQV9UQUdfRFJJVkVSKHl0OTIxeF9uZXRkZXZfb3BzKTtcXG4gTU9EVUxFX0FMSUFTX0RTQV9UQUdfRFJJVkVSKERTQV9UQUdfUFJPVE9fWVQ5MjFYLCBZVDkyMVhfVEFHX05BTUUpO1xcbiBcXG4tbW9kdWxlX2RzYV90YWdfZHJpdmVyKHl0OTIxeF9uZXRkZXZfb3BzKTtcXG4rLyogVG8gZGVmaW5lIHRoZSBmcm9tIGNwdSB0YWcgZm9ybWF0IDggYnl0ZXM6XFxuKyAqXFxuKyAqIDAgMSAyIDMgNCA1IDYgNyB8MCAxIDIgMyA0IDUgNiA3XFxuKyAqfFxcdTAwM2MtLS0tLS0tLS0tLS1UUElEIDB4OTk4OC0tLS0tLS1cXHUwMDNlfFxcbisgKnxcXHUwMDNjLS1SRVNFUlZFLS1cXHUwMDNlfFxcdTAwM2MtLS0tLURTVCBQT1ItLS0tXFx1MDAzZXxcXG4rICp8LXxcXHUwMDNjLS0tLS0tLS0tUkVTRVJWRS0tLS0tLS0tLS0tLVxcdTAwM2V8XFxuKyAqfFxcdTAwM2MtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXHUwMDNlfFxcbisgKi9cXG4rI2RlZmluZSBZVDkyMlhfVEFHX05BTUVcXHRcXHRcXHRcXFwieXQ5MjJ4XFxcIlxcbisjZGVmaW5lIFlUOTIyWF9UQUdfUE9SVE1BU0tfMFxcdFxcdEJJVCgxNSlcXG4rI2RlZmluZSBZVDkyMlhfVEFHX1BPUlRNQVNLX01cXHRcXHRHRU5NQVNLKDgsIDApXFxuKyNkZWZpbmUgWVQ5MjJYX1RBR19QT1JUUyh4KVxcdFxcdEZJRUxEX1BSRVAoWVQ5MjJYX1RBR19QT1JUTUFTS19NLCAoeCkpXFxuKyNkZWZpbmUgWVQ5MjJYX1RBR19GT1JDRV9EU1RcXHRcXHRCSVQoOSlcXG4rI2RlZmluZSBZVDkyMlhfVEFHX1BSSU9fTVxcdFxcdEdFTk1BU0soMTIsIDEwKVxcbisjZGVmaW5lIFlUOTIyWF9UQUdfUFJJT19FTlxcdFxcdEJJVCgxMylcXG4rI2RlZmluZSBZVDkyMlhfVEFHX1BSSU8oeClcXHRcXHQoRklFTERfUFJFUChZVDkyMlhfVEFHX1BSSU9fTSwgKHgpKSB8IFlUOTIyWF9UQUdfUFJJT19FTilcXG4rI2RlZmluZSBZVDkyMlhfVEFHX1JYX1BPUlRfTVxcdFxcdEdFTk1BU0soNSwgMilcXG4rI2RlZmluZSBZVDkyMlhfVEFHX1JYX1BSSU9fTVxcdFxcdEdFTk1BU0soMTUsIDEzKVxcbitcXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpcXG4reXQ5MjJ4X3RhZ194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQobmV0ZGV2KTtcXG4rXFx0X19iZTE2ICp0YWc7XFxuK1xcdHUxNiBjdHJsO1xcbitcXG4rXFx0c2tiX3B1c2goc2tiLCBZVDkyMVhfVEFHX0xFTik7XFxuK1xcdGRzYV9hbGxvY19ldHlwZV9oZWFkZXIoc2tiLCBZVDkyMVhfVEFHX0xFTik7XFxuK1xcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3R4KHNrYik7XFxuK1xcbitcXHR0YWdbMF0gPSBodG9ucyhFVEhfUF9ZVDkyMVgpO1xcbitcXHRpZiAoZHAtXFx1MDAzZWluZGV4ICE9IDApIHtcXG4rXFx0XFx0LyogUG9ydCBpbmRleCBpcyBub3QgZXF1YWwgMCBpbiB0YWdbMV0gKi9cXG4rXFx0XFx0Y3RybCA9IFlUOTIyWF9UQUdfUFJJTyhza2ItXFx1MDAzZXByaW9yaXR5KSB8IFlUOTIyWF9UQUdfRk9SQ0VfRFNUIHxcXG4rXFx0XFx0XFx0WVQ5MjJYX1RBR19QT1JUUyhkc2FfeG1pdF9wb3J0X21hc2soc2tiLCBuZXRkZXYpIC0gMSk7XFxuK1xcdFxcdHRhZ1sxXSA9IGh0b25zKGN0cmwpO1xcbitcXHRcXHR0YWdbMl0gPSAwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBQb3J0IDAgaW4gYml0MTUgaW4gdGFnWzJdICovXFxuK1xcdFxcdGN0cmwgPSBZVDkyMlhfVEFHX1BSSU8oc2tiLVxcdTAwM2Vwcmlvcml0eSkgfCBZVDkyMlhfVEFHX0ZPUkNFX0RTVDtcXG4rXFx0XFx0dGFnWzFdID0gaHRvbnMoY3RybCk7XFxuK1xcdFxcdGN0cmwgPSBZVDkyMlhfVEFHX1BPUlRNQVNLXzA7XFxuK1xcdFxcdHRhZ1syXSA9IGh0b25zKGN0cmwpO1xcbitcXHR9XFxuK1xcdHRhZ1szXSA9IDA7XFxuK1xcbitcXHRyZXR1cm4gc2tiO1xcbit9XFxuK1xcbitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxcbit5dDkyMnhfdGFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBwb3J0O1xcbitcXHRfX2JlMTYgKnRhZztcXG4rXFx0dTE2IHJ4O1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFwc2tiX21heV9wdWxsKHNrYiwgWVQ5MjFYX1RBR19MRU4pKSkge1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7XFxuK1xcbitcXHRpZiAodW5saWtlbHkodGFnWzBdICE9IGh0b25zKEVUSF9QX1lUOTIxWCkpKSB7XFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKFxcdTAwMjZuZXRkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiVW5leHBlY3RlZCBFdGhlclR5cGUgMHglMDR4XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIG50b2hzKHRhZ1swXSkpO1xcbitcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIExvY2F0ZSB3aGljaCBwb3J0IHRoaXMgaXMgY29taW5nIGZyb20gKi9cXG4rXFx0cnggPSBudG9ocyh0YWdbMl0pO1xcbitcXHRwb3J0ID0gRklFTERfR0VUKFlUOTIyWF9UQUdfUlhfUE9SVF9NLCByeCk7XFxuK1xcdHNrYi1cXHUwMDNlZGV2ID0gZHNhX2NvbmR1aXRfZmluZF91c2VyKG5ldGRldiwgMCwgcG9ydCk7XFxuK1xcdGlmICh1bmxpa2VseSghc2tiLVxcdTAwM2VkZXYpKSB7XFxuK1xcdFxcdGRldl93YXJuX3JhdGVsaW1pdGVkKFxcdTAwMjZuZXRkZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0ICAgICBcXFwiQ291bGRuJ3QgZGVjb2RlIHNvdXJjZSBwb3J0ICV1XFxcXG5cXFwiLCBwb3J0KTtcXG4rXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHQvKiBSZW1vdmUgdGFnIGFuZCB1cGRhdGUgY2hlY2tzdW0gKi9cXG4rXFx0c2tiX3B1bGxfcmNzdW0oc2tiLCBZVDkyMVhfVEFHX0xFTik7XFxuK1xcdGRzYV9zdHJpcF9ldHlwZV9oZWFkZXIoc2tiLCBZVDkyMVhfVEFHX0xFTik7XFxuK1xcbitcXHRyZXR1cm4gc2tiO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIHl0OTIyeF9uZXRkZXZfb3BzID0ge1xcbitcXHQubmFtZSAgID0gWVQ5MjJYX1RBR19OQU1FLFxcbitcXHQucHJvdG8gID0gRFNBX1RBR19QUk9UT19ZVDkyMlgsXFxuK1xcdC54bWl0ICAgPSB5dDkyMnhfdGFnX3htaXQsXFxuK1xcdC5yY3YgICAgPSB5dDkyMnhfdGFnX3JjdixcXG4rXFx0Lm5lZWRlZF9oZWFkcm9vbSA9IFlUOTIxWF9UQUdfTEVOLFxcbit9O1xcbitcXG4rRFNBX1RBR19EUklWRVIoeXQ5MjJ4X25ldGRldl9vcHMpO1xcbitNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19ZVDkyMlgsIFlUOTIyWF9UQUdfTkFNRSk7XFxuK1xcbitzdGF0aWMgc3RydWN0IGRzYV90YWdfZHJpdmVyICpkc2FfdGFnX2RyaXZlcl9hcnJheVtdID0ge1xcbitcXHRcXHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRSh5dDkyMXhfbmV0ZGV2X29wcyksXFxuK1xcdFxcdTAwMjZEU0FfVEFHX0RSSVZFUl9OQU1FKHl0OTIyeF9uZXRkZXZfb3BzKSxcXG4rfTtcXG4rbW9kdWxlX2RzYV90YWdfZHJpdmVycyhkc2FfdGFnX2RyaXZlcl9hcnJheSk7XFxuK1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIkRTQSB0YWcgZHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IGFuZCBZVDkyMnggc3dpdGNoZXNcXFwiKTtcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbitcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjE6MjcuMzE1MDU0Njg1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTg5MjY3MjE3MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjI0IGV0aGVybmV0IHN3aXRjaCBjaGlwIHRvIHRoZSB5dDkyMXggRFNBIGRyaXZlciBhbmQgYSBjb3JyZXNwb25kaW5nIERTQSB0YWcgZHJpdmVyLiBUaGUgZHJpdmVyIGlzIGFuIE1ESU8gZHJpdmVyIHRoYXQgcmVsaWVzIG9uIERldmljZSBUcmVlIChPRiBtYXRjaCBkYXRhKSB0byBwcm9iZSwgd2hpY2ggaXMgbm90IGF2YWlsYWJsZSBvciBkeW5hbWljYWxseSBpbmplY3RhYmxlIGluIHN0YW5kYXJkIHg4Nl82NCBRRU1VL0dDRSBlbnZpcm9ubWVudHMuIEZ1cnRoZXJtb3JlLCB0aGUgRFNBIHRhZyBkcml2ZXIgY2Fubm90IGJlIHJlYWNoZWQgYmVjYXVzZSBubyBlbXVsYXRlZCBEU0Egc3dpdGNoIChsaWtlIGRzYV9sb29wKSBjYW4gYmUgY29uZmlndXJlZCB0byB1c2UgdGhlIG5ld2x5IGFkZGVkIERTQV9UQUdfUFJPVE9fWVQ5MjJYIHByb3RvY29sLiBUaGVyZWZvcmUsIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZiOTMxZTkwMmYxODFlYTE4MjUwYjU5YWM5NDczODI1ZGQxZjJiMTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAxNCAwMjoyMToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbmluZGV4IDRhYjU2N2M1YmJhZmMuLjY5YzgyNGZkOTViZjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL0tjb25maWdcbkBAIC0xNTksMTEgKzE1OSwxMSBAQCBjb25maWcgTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfUExBVEZPUk1cbiBcdCAgYW5kIFZTQzczOTggU3BhclggaW50ZWdyYXRlZCBldGhlcm5ldCBzd2l0Y2hlcywgY29ubmVjdGVkIG92ZXJcbiBcdCAgYSBDUFUtYXR0YWNoZWQgYWRkcmVzcyBidXMgYW5kIHdvcmsgaW4gbWVtb3J5LW1hcHBlZCBJL08gbW9kZS5cbiBcbi1jb25maWcgTkVUX0RTQV9ZVDkyMVhcbi1cdHRyaXN0YXRlIFwiTW90b3Jjb21tIFlUOTIxNSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0XCJcbi1cdHNlbGVjdCBORVRfRFNBX1RBR19ZVDkyMVhcbitjb25maWcgTkVUX0RTQV9ZVDkyWFhcbitcdHRyaXN0YXRlIFwiTW90b3Jjb21tIFlUOTIxNSBhbmQgWVQ5MjI0IGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnRcIlxuK1x0c2VsZWN0IE5FVF9EU0FfVEFHX1lUOTJYWFxuIFx0c2VsZWN0IE5FVF9JRUVFODAyMVFfSEVMUEVSUyBpZiBEQ0JcbiBcdGhlbHBcbi1cdCAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ5MjE1IGV0aGVybmV0IHN3aXRjaFxuK1x0ICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUgYW5kIFlUOTIyNCBldGhlcm5ldCBzd2l0Y2hcbiBcdCAgY2hpcC5cbiBlbmRtZW51XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG5pbmRleCBkMjk3NWJhZGZmYzA5Li4xOGMyY2VlZjA5YTUxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL01ha2VmaWxlXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGVcbkBAIC0xNCw3ICsxNCw3IEBAIG9iai0kKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKSArPSBsYW45MzAzX21kaW8ub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWCkgKz0gdml0ZXNzZS12c2M3M3h4LWNvcmUub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1ZJVEVTU0VfVlNDNzNYWF9QTEFURk9STSkgKz0gdml0ZXNzZS12c2M3M3h4LXBsYXRmb3JtLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9WSVRFU1NFX1ZTQzczWFhfU1BJKSArPSB2aXRlc3NlLXZzYzczeHgtc3BpLm9cbi1vYmotJChDT05GSUdfTkVUX0RTQV9ZVDkyMVgpICs9IHl0OTIxeC5vXG4rb2JqLSQoQ09ORklHX05FVF9EU0FfWVQ5MlhYKSArPSB5dDkyMXgub1xuIG9iai15XHRcdFx0XHQrPSBiNTMvXG4gb2JqLXlcdFx0XHRcdCs9IGhpcnNjaG1hbm4vXG4gb2JqLXlcdFx0XHRcdCs9IGxhbnRpcS9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMgYi9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbmluZGV4IDE1OWIxNjYwNmY2Y2EuLjc0MjU1NWY4NzgxOWUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguY1xuQEAgLTE0OCwxMCArMTQ4LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8geXQ5MjF4X2luZm9zW10gPSB7XG4gXHRcdFlUOTIxWF9QT1JUX01BU0tfSU5UMF9uKDgpLFxuIFx0XHRZVDkyMVhfUE9SVF9NQVNLX0VYVDAgfCBZVDkyMVhfUE9SVF9NQVNLX0VYVDEsXG4gXHR9LFxuK1x0e1xuK1x0XHRcIllUOTIyNFwiLCBZVDkyMjRfTUFKT1IsIDAsIDAsXG4rXHRcdDB4MWYxLFxuK1x0XHQweDAsXG4rXHR9LFxuIFx0e31cbiB9O1xuIFxuLSNkZWZpbmUgWVQ5MjFYX05BTUVcdFwieXQ5MjF4XCJcbisjZGVmaW5lIFlUOTJYWF9OQU1FXHRcInl0OTJ4eFwiXG4gXG4gI2RlZmluZSBZVDkyMVhfVklEX1VOV0FSRVx0NDA5NVxuIFxuQEAgLTU2MCwxMCArNTY1LDEyIEBAIHl0OTIxeF9pbnRpZl93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxuIHN0YXRpYyBpbnQgeXQ5MjF4X21idXNfaW50X3JlYWQoc3RydWN0IG1paV9idXMgKm1idXMsIGludCBwb3J0LCBpbnQgcmVnKVxuIHtcbiBcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXHUwMDNlcHJpdjtcbitcdGludCBtYXhfcG9ydHM7XG4gXHR1MTYgdmFsO1xuIFx0aW50IHJlcztcbiBcbi1cdGlmIChwb3J0IFx1MDAzZT0gWVQ5MjFYX1BPUlRfTlVNKVxuK1x0bWF4X3BvcnRzID0gcHJpdi1cdTAwM2VjaGlwX2luZm8tXHUwMDNlcG9ydHM7XG4rXHRpZiAocG9ydCBcdTAwM2U9IG1heF9wb3J0cylcbiBcdFx0cmV0dXJuIFUxNl9NQVg7XG4gXG4gXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuQEAgLTU3OSw5ICs1ODYsMTEgQEAgc3RhdGljIGludFxuIHl0OTIxeF9tYnVzX2ludF93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqbWJ1cywgaW50IHBvcnQsIGludCByZWcsIHUxNiBkYXRhKVxuIHtcbiBcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1idXMtXHUwMDNlcHJpdjtcbitcdGludCBtYXhfcG9ydHM7XG4gXHRpbnQgcmVzO1xuIFxuLVx0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMVhfUE9SVF9OVU0pXG4rXHRtYXhfcG9ydHMgPSBwcml2LVx1MDAzZWNoaXBfaW5mby1cdTAwM2Vwb3J0cztcbitcdGlmIChwb3J0IFx1MDAzZT0gbWF4X3BvcnRzKVxuIFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG5AQCAtNTk2LDE5ICs2MDUsMjEgQEAgeXQ5MjF4X21idXNfaW50X2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm1ucClcbiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqbWJ1cztcbitcdGludCBtYXhfcG9ydHM7XG4gXHRpbnQgcmVzO1xuIFxuIFx0bWJ1cyA9IGRldm1fbWRpb2J1c19hbGxvYyhkZXYpO1xuIFx0aWYgKCFtYnVzKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbitcdG1heF9wb3J0cyA9IHByaXYtXHUwMDNlY2hpcF9pbmZvLVx1MDAzZXBvcnRzO1xuIFx0bWJ1cy1cdTAwM2VuYW1lID0gXCJZVDkyMXggaW50ZXJuYWwgTURJTyBidXNcIjtcbiBcdHNucHJpbnRmKG1idXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCIlc1wiLCBkZXZfbmFtZShkZXYpKTtcbiBcdG1idXMtXHUwMDNlcHJpdiA9IHByaXY7XG4gXHRtYnVzLVx1MDAzZXJlYWQgPSB5dDkyMXhfbWJ1c19pbnRfcmVhZDtcbiBcdG1idXMtXHUwMDNld3JpdGUgPSB5dDkyMXhfbWJ1c19pbnRfd3JpdGU7XG4gXHRtYnVzLVx1MDAzZXBhcmVudCA9IGRldjtcbi1cdG1idXMtXHUwMDNlcGh5X21hc2sgPSAodTMyKX5HRU5NQVNLKFlUOTIxWF9QT1JUX05VTSAtIDEsIDApO1xuK1x0bWJ1cy1cdTAwM2VwaHlfbWFzayA9ICh1MzIpfkdFTk1BU0sobWF4X3BvcnRzIC0gMSwgMCk7XG4gXG4gXHRyZXMgPSBkZXZtX29mX21kaW9idXNfcmVnaXN0ZXIoZGV2LCBtYnVzLCBtbnApO1xuIFx0aWYgKHJlcylcbkBAIC00NzQ4LDYgKzQ3NTksMTMgQEAgc3RhdGljIGludCB5dDkyMXhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQ7XG4gXHRpbnQgcmVzO1xuIFxuK1x0Zm9yIChzaXplX3QgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgeXQ5MjF4X3BvcnQgKnBwID0gXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXTtcbitcbitcdFx0cHAtXHUwMDNlaW5kZXggPSBpO1xuK1x0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwcC1cdTAwM2VtaWJfcmVhZCwgeXQ5MjF4X3BvbGxfbWliKTtcbitcdH1cbitcbiBcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4gXHRyZXMgPSB5dDkyMXhfY2hpcF9yZXNldChwcml2KTtcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbkBAIC00ODY5LDExNCArNDg4Nyw5MzUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMXhfZHNhX3N3aXRjaF9vcHMgPSB7XG4gXHQuc2V0dXBcdFx0XHQ9IHl0OTIxeF9kc2Ffc2V0dXAsXG4gfTtcbiBcbi1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4rc3RhdGljIGludCB5dDkyMnhfcG9ydF9kb3duKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiwgaW50IHBvcnQpXG4ge1xuLVx0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbitcdHUzMiBtYXNrO1xuK1x0aW50IHJlcztcbiBcbi1cdGlmICghcHJpdilcbi1cdFx0cmV0dXJuO1xuK1x0LyogbWFjIGZvcmNlIGRvd24gKi9cbitcdG1hc2sgPSBZVDkyMlhfUE9SVF9MSU5LIHwgWVQ5MjJYX1BPUlRfUlhfTUFDX0VOIHxcbitcdCAgICAgICBZVDkyMlhfUE9SVF9UWF9NQUNfRU4gfCBZVDkyMlhfUE9SVF9MSU5LX0FOO1xuK1x0cmVzID0geXQ5MjF4X3JlZ19jbGVhcl9iaXRzKHByaXYsIFlUOTIyWF9QT1JUbl9DVFJMKHBvcnQpLCBtYXNrKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHQvKiBOZWVkIGZvcmNlIG9wIHRvIG1ha2Ugc29mdCBjb25maWd1cmF0aW9uIGVmZmVjdGl2ZSAqL1xuK1x0bWFzayA9IFlUOTIyWF9QT1JUX0ZPUkNFX09QO1xuK1x0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfUE9SVG5fQ1RSTChwb3J0KSwgbWFzayk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuIFxuLVx0ZHNhX3N3aXRjaF9zaHV0ZG93bihcdTAwMjZwcml2LVx1MDAzZWRzKTtcbitcdC8qIGRpc2FibGUgZW5fcGh5ICovXG4rXHRyZXMgPSB5dDkyMXhfcmVnX2NsZWFyX2JpdHMocHJpdiwgWVQ5MjJYX0VOX1BIWV9WQUxVRSwgQklUKHBvcnQpKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfT1ZFUldSSVRFLCBCSVQocG9ydCkpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB5dDkyMXhfbWRpb19yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuK3N0YXRpYyB2b2lkXG4reXQ5MjJ4X3BoeWxpbmtfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG4rXHRcdFx0ICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuIHtcbi1cdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IG1kaW9kZXZfZ2V0X2RydmRhdGEobWRpb2Rldik7XG4rXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwID0gZHNhX3BoeWxpbmtfdG9fcG9ydChjb25maWcpO1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gdG9feXQ5MjF4X3ByaXYoZHAtXHUwMDNlZHMpO1xuK1x0aW50IHBvcnQgPSBkcC1cdTAwM2VpbmRleDtcbitcdGludCByZXM7XG4gXG4tXHRpZiAoIXByaXYpXG4tXHRcdHJldHVybjtcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMnhfcG9ydF9kb3duKHByaXYsIHBvcnQpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuIFxuLVx0Zm9yIChzaXplX3QgaSA9IEFSUkFZX1NJWkUocHJpdi1cdTAwM2Vwb3J0cyk7IGktLSBcdTAwM2UgMDsgKSB7XG4tXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuK1x0aWYgKHJlcylcbitcdFx0ZGV2X2VycihkcC1cdTAwM2Vkcy1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvICVzIHBvcnQgJWQ6ICVpXFxuXCIsIFwiYnJpbmcgZG93blwiLFxuK1x0XHRcdHBvcnQsIHJlcyk7XG4rfVxuIFxuLVx0XHRkaXNhYmxlX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkKTtcbitzdGF0aWMgaW50XG4reXQ5MjJ4X3BvcnRfdXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IG1vZGUsXG4rXHQgICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwgaW50IHNwZWVkLCBpbnQgZHVwbGV4LFxuK1x0ICAgICAgIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXG4re1xuK1x0dTMyIG1hc2s7XG4rXHR1MzIgY3RybDtcbitcdGludCByZXM7XG4rXG4rXHRzd2l0Y2ggKHNwZWVkKSB7XG4rXHRjYXNlIFNQRUVEXzEwOlxuK1x0XHRjdHJsID0gWVQ5MjFYX1BPUlRfU1BFRURfMTA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBTUEVFRF8xMDA6XG4rXHRcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDA7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBTUEVFRF8xMDAwOlxuK1x0XHRjdHJsID0gWVQ5MjFYX1BPUlRfU1BFRURfMTAwMDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFNQRUVEXzI1MDA6XG4rXHRcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8yNTAwO1xuK1x0XHRicmVhaztcbitcdGNhc2UgU1BFRURfMTAwMDA6XG4rXHRcdGN0cmwgPSBZVDkyMVhfUE9SVF9TUEVFRF8xMDAwMDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbitcdGlmIChkdXBsZXggPT0gRFVQTEVYX0ZVTEwpXG4rXHRcdGN0cmwgfD0gWVQ5MjJYX1BPUlRfRFVQTEVYX0ZVTEw7XG4rXHRpZiAodHhfcGF1c2UpXG4rXHRcdGN0cmwgfD0gWVQ5MjJYX1BPUlRfVFhfUEFVU0U7XG4rXHRpZiAocnhfcGF1c2UpXG4rXHRcdGN0cmwgfD0gWVQ5MjJYX1BPUlRfUlhfUEFVU0U7XG4rXHRjdHJsIHw9IFlUOTIyWF9QT1JUX1JYX01BQ19FTiB8IFlUOTIyWF9QT1JUX1RYX01BQ19FTiB8XG4rXHRcdFlUOTIyWF9QT1JUX0NGR19UWF9FTiB8IFlUOTIyWF9QT1JUX0xJTksgfFxuK1x0XHRZVDkyMlhfUE9SVF9DRkdfUlhfRU47XG4rXHRjdHJsIFx1MDAyNj0gfihZVDkyMlhfUE9SVF9GQ19BTiB8IFlUOTIyWF9QT1JUX0xJTktfQU4pO1xuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMVhfUE9SVG5fQ1RSTChwb3J0KSwgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0LyogZm9yY2Ugb3AgKi9cbitcdG1hc2sgPSBZVDkyMlhfUE9SVF9GT1JDRV9PUDtcbitcdHJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCksIG1hc2spO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbiBcbi1cdGRzYV91bnJlZ2lzdGVyX3N3aXRjaChcdTAwMjZwcml2LVx1MDAzZWRzKTtcbitcdC8qIGVuYWJsZSBlbl9waHkgKi9cbitcdHJlcyA9IHl0OTIxeF9yZWdfc2V0X2JpdHMocHJpdiwgWVQ5MjJYX0VOX1BIWV9WQUxVRSwgQklUKHBvcnQpKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIyWF9FTl9QSFlfT1ZFUldSSVRFLCBCSVQocG9ydCkpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbiBcbi1cdGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXHUwMDNlYWNsX2Jsa3MpOyBpKyspIHtcbi1cdFx0c3RydWN0IHl0OTIxeF9hY2xfYmxrICphY2xibGsgPSBwcml2LVx1MDAzZWFjbF9ibGtzW2ldO1xuK1x0cmV0dXJuIDA7XG4rfVxuIFxuLVx0XHRpZiAoIWFjbGJsaylcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0Zm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogXHUwMDNjIEFSUkFZX1NJWkUoYWNsYmxrLVx1MDAzZXJ1bGVzKTsgaisrKSB7XG4tXHRcdFx0c3RydWN0IHl0OTIxeF9hY2xfcnVsZSAqYWNscnVsZSA9IGFjbGJsay1cdTAwM2VydWxlc1tqXTtcbitzdGF0aWMgdm9pZFxuK3l0OTIyeF9waHlsaW5rX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuK1x0XHRcdCAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHVuc2lnbmVkIGludCBtb2RlLFxuK1x0XHRcdCAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsIGludCBzcGVlZCwgaW50IGR1cGxleCxcbitcdFx0XHQgICBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxuK3tcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcC1cdTAwM2Vkcyk7XG4rXHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuK1x0aW50IHJlcztcbiBcbi1cdFx0XHRpZiAoIWFjbHJ1bGUpXG4tXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRrdmZyZWUoYWNscnVsZSk7XG4tXHRcdH1cbi1cdFx0a3ZmcmVlKGFjbGJsayk7XG4tXHR9XG4tXHRtdXRleF9kZXN0cm95KFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdHJlcyA9IHl0OTIyeF9wb3J0X3VwKHByaXYsIHBvcnQsIG1vZGUsIGludGVyZmFjZSwgc3BlZWQsIGR1cGxleCxcbitcdFx0XHQgICAgIHR4X3BhdXNlLCByeF9wYXVzZSk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRpZiAocmVzKVxuK1x0XHRkZXZfZXJyKGRwLVx1MDAzZWRzLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gJXMgcG9ydCAlZDogJWlcXG5cIiwgXCJicmluZyB1cFwiLFxuK1x0XHRcdHBvcnQsIHJlcyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgeXQ5MjF4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuK3N0YXRpYyBpbnRcbit5dDkyMnhfaW50aWZfZXh0X3JlYWQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCwgaW50IHJlZywgdTE2ICp2YWxwKVxuIHtcbi1cdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuLVx0c3RydWN0IHl0OTIxeF9yZWdfbWRpbyAqbWRpbztcbi1cdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdjtcbi1cdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcbitcdGludCByZXM7XG4gXG4tXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoIXByaXYpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMlhfUE9SVF9OVU0pXG4rXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xuLVx0aWYgKCFtZGlvKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBwb3J0LCBZVDkyWFhfUEFHRV9TRUxFQ1QsIHJlZyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuIFxuLVx0bWRpby1cdTAwM2VidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbi1cdG1kaW8tXHUwMDNlYWRkciA9IG1kaW9kZXYtXHUwMDNlYWRkcjtcbi1cdG1kaW8tXHUwMDNlc3dpdGNoaWQgPSAwO1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX3JlYWQocHJpdiwgcG9ydCwgWVQ5MlhYX1BBR0UsIHZhbHApO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbiBcbi1cdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXR1cm4gMDtcbit9XG4gXG4tXHRwcml2LVx1MDAzZXJlZ19vcHMgPSBcdTAwMjZ5dDkyMXhfcmVnX29wc19tZGlvO1xuLVx0cHJpdi1cdTAwM2VyZWdfY3R4ID0gbWRpbztcbitzdGF0aWMgaW50XG4reXQ5MjF4X2ludGlmX2V4dF93cml0ZShzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCBpbnQgcmVnLCB1MTYgdmFsKVxuK3tcbitcdGludCByZXM7XG4gXG4tXHRmb3IgKHNpemVfdCBpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaSsrKSB7XG4tXHRcdHN0cnVjdCB5dDkyMXhfcG9ydCAqcHAgPSBcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldO1xuK1x0aWYgKHBvcnQgXHUwMDNlPSBZVDkyMVhfUE9SVF9OVU0pXG4rXHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0XHRwcC1cdTAwM2VpbmRleCA9IGk7XG4tXHRcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnBwLVx1MDAzZW1pYl9yZWFkLCB5dDkyMXhfcG9sbF9taWIpO1xuLVx0fVxuK1x0cmVzID0geXQ5MjF4X2ludGlmX3dyaXRlKHByaXYsIHBvcnQsIFlUOTJYWF9QQUdFX1NFTEVDVCwgcmVnKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4gXG4tXHRkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4tXHRkcy1cdTAwM2VkZXYgPSBkZXY7XG4tXHRkcy1cdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XG4tXHRkcy1cdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xuLVx0ZHMtXHUwMDNlcHJpdiA9IHByaXY7XG4tXHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZ5dDkyMXhfZHNhX3N3aXRjaF9vcHM7XG4tXHRkcy1cdTAwM2VhZ2VpbmdfdGltZV9taW4gPSAxICogNTAwMDtcbi1cdGRzLVx1MDAzZWFnZWluZ190aW1lX21heCA9IFUxNl9NQVggKiA1MDAwO1xuLVx0ZHMtXHUwMDNlcGh5bGlua19tYWNfb3BzID0gXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcztcbi1cdGRzLVx1MDAzZW51bV9sYWdfaWRzID0gWVQ5MjFYX0xBR19OVU07XG4tXHRkcy1cdTAwM2VudW1fcG9ydHMgPSBZVDkyMVhfUE9SVF9OVU07XG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfd3JpdGUocHJpdiwgcG9ydCwgWVQ5MlhYX1BBR0UsIHZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuIFxuLVx0bWRpb2Rldl9zZXRfZHJ2ZGF0YShtZGlvZGV2LCBwcml2KTtcbitcdHJldHVybiAwO1xuK31cbiBcbi1cdHJldHVybiBkc2FfcmVnaXN0ZXJfc3dpdGNoKGRzKTtcbitzdGF0aWMgaW50IHl0OTIyeF9pbnRlcm5hbF9waHlhZGRyX2dldChpbnQgcG9ydCxcbitcdFx0XHRcdCAgICAgICBlbnVtIHl0OTIyeF9waHlfcmVnX3R5cGUgcmVnX3R5cGUsXG4rXHRcdFx0XHQgICAgICAgZW51bSB5dDkyMnhfcGh5X3JlZ19zcGFjZSByZWdfc3BhY2UpXG4re1xuK1x0aW50IHJlcztcbitcbitcdGlmIChwb3J0IFx1MDAzZT0gNCBcdTAwMjZcdTAwMjYgcG9ydCBcdTAwM2M9IDcpIHtcbitcdFx0c3dpdGNoIChyZWdfdHlwZSkge1xuK1x0XHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfQ09NTU9OX0VYVDpcbitcdFx0XHRyZXMgPSA5O1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfUEhZX0NPTU1PTl9FWFQ6XG4rXHRcdFx0aWYgKHBvcnQgXHUwMDNjPSA1IFx1MDAyNlx1MDAyNiBwb3J0IFx1MDAzZT0gNClcbitcdFx0XHRcdHJlcyA9IDQ7XG4rXHRcdFx0ZWxzZSBpZiAocG9ydCBcdTAwM2M9IDcgXHUwMDI2XHUwMDI2IHBvcnQgXHUwMDNlPSA2KVxuK1x0XHRcdFx0cmVzID0gNjtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhUOlxuK1x0XHRcdHJlcyA9IC1FSU5WQUw7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4rXHRcdFx0aWYgKHJlZ19zcGFjZSAhPSBZVDkyMlhfUEhZX1JFR19TUEFDRV9QSFkpXG4rXHRcdFx0XHRyZXMgPSAtRUlOVkFMO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRpZiAocG9ydCA9PSA4KSB7XG4rXHRcdFx0c3dpdGNoIChyZWdfdHlwZSkge1xuK1x0XHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9DT01NT05fRVhUOlxuK1x0XHRcdFx0cmVzID0gOTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVDpcbitcdFx0XHRcdHJlcyA9IDg7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRjYXNlIFlUOTIyWF9QSFlfUkVHX1RZUEVfTUlJOlxuK1x0XHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9FWFQ6XG4rXHRcdFx0XHRpZiAocmVnX3NwYWNlID09IFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJIHx8XG4rXHRcdFx0XHQgICAgcmVnX3NwYWNlID09IFlUOTIyWF9QSFlfUkVHX1NQQUNFX1VTWEdNSUkpXG4rXHRcdFx0XHRcdHJlcyA9IDg7XG4rXHRcdFx0XHRlbHNlXG4rXHRcdFx0XHRcdHJlcyA9IC1FSU5WQUw7XG4rXHRcdFx0XHRicmVhaztcbitcdFx0XHRkZWZhdWx0OlxuK1x0XHRcdFx0cmVzID0gLUVJTlZBTDtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0XHR9XG4rXHRcdHN3aXRjaCAocmVnX3R5cGUpIHtcbitcdFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX0NPTU1PTl9FWFQ6XG4rXHRcdFx0cmVzID0gOTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhUOlxuK1x0XHRcdHJlcyA9IDA7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9NSUk6XG4rXHRcdGNhc2UgWVQ5MjJYX1BIWV9SRUdfVFlQRV9FWFQ6XG4rXHRcdFx0aWYgKHJlZ19zcGFjZSA9PSBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSB8fFxuK1x0XHRcdCAgICByZWdfc3BhY2UgPT0gWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfVVNYR01JSSlcbitcdFx0XHRcdHJlcyA9IDA7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0cmVzID0gLUVJTlZBTDtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRyZXMgPSAtRUlOVkFMO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmVzO1xuIH1cbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyMXhfb2ZfbWF0Y2hbXSA9IHtcbi1cdHsgLmNvbXBhdGlibGUgPSBcIm1vdG9yY29tbSx5dDkyMTVcIiB9LFxuK3N0YXRpYyBpbnQgeXQ5MjJ4X3BvcnRfc2RzX2luaXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2LCBpbnQgcG9ydCxcbitcdFx0XHRcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4re1xuK1x0aW50IGFkZHI7XG4rXHR1MTYgZGF0YTtcbitcdGludCByZXM7XG4rXG4rXHRhZGRyID0geXQ5MjJ4X2ludGVybmFsX3BoeWFkZHJfZ2V0KHBvcnQsXG4rXHRcdFx0XHRcdCAgIFlUOTIyWF9QSFlfUkVHX1RZUEVfU0RTX0NPTU1PTl9FWFQsXG4rXHRcdFx0XHRcdCAgIFlUOTIyWF9QSFlfUkVHX1NQQUNFX1NHTUlJKTtcbitcdGlmIChhZGRyIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdC8qIHdyaXRlIHByb3RlY3QgKi9cbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0YmUsIDB4ZCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0LyogQ0RSICovXG4rXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDBCQVNFWCkge1xuK1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDA2LCAweDApO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MTYsIDB4MzQ1OCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH0gZWxzZSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MDYsIDB4ODAwKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDE2LCAweDQ1NTgpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHR9XG4rXHQvKiBQTEwgKi9cbitcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUkpIHtcbitcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzYSwgMHgxMDA2KTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDNmLCAweDMwMjkpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MmEsIDB4ZjA3MCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH0gZWxzZSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2QsIDB4MjA3ZCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQzYywgMHgyMDdkKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDNmLCAweDMwMzIpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0M2EsIDB4Nik7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdFx0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQyYSwgMHhmMDcwKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1x0fVxuK1x0LyogVkNPICovXG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDM5LCAweEMwKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHQvKiBWZGFjICovXG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDkyLCAweDdmN2YpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTEsIDB4N2YpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdC8qIEV5ZSAqL1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ1NCwgMHhmMTQpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTcsIDB4YTQ0KTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NGNkLCAweDApO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0YWYsIDB4NDVlMyk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ4YSwgMHhmZmYpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0MDgsIDB4N2MwMCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRkNiwgMHg3Zik7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDQ0ZiwgMHhmZjA4KTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHQvKiBGRkUgKi9cbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OGUsIDB4N2QwMCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweGQsIDB4NjBmKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHQvKiBDVExFICovXG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NGIwLCAweDgwNCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDRiMSwgMHg3Nzc0KTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NGFmLCAweDQ1ZTcpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHgzLCAweDU2MDMpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdG1zbGVlcCgyMCk7XG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIDB4NDkyLCAweDdmZmYpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHg0OTIsIDB4N2Y3Zik7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0LyogQ1RMRSAqL1xuK1x0cmVzID0geXQ5MjF4X2ludGlmX2V4dF93cml0ZShwcml2LCBhZGRyLCAweDIwMDAsIDB4NDApO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHgyMDAwLCAweDApO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJKSB7XG4rXHRcdHJlcyA9IHl0OTIxeF9pbnRpZl9leHRfd3JpdGUocHJpdiwgYWRkciwgMHgxMDQyLCAweDQ4Yyk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbisgICAgLyogc29mdCByZXNldCAqL1xuK1x0YWRkciA9IHl0OTIyeF9pbnRlcm5hbF9waHlhZGRyX2dldChwb3J0LCBZVDkyMlhfUEhZX1JFR19UWVBFX01JSSxcbitcdFx0XHRcdFx0ICAgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkpO1xuK1x0aWYgKGFkZHIgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXM7XG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfcmVhZChwcml2LCBhZGRyLCAweDIwMDAsIFx1MDAyNmRhdGEpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdGRhdGEgXHUwMDI2PSB+KDEgXHUwMDNjXHUwMDNjIDE1KTtcbitcdHJlcyA9IHl0OTIxeF9pbnRpZl93cml0ZShwcml2LCBhZGRyLCAweDIwMDAsIGRhdGEpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdGFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQocG9ydCwgWVQ5MjJYX1BIWV9SRUdfVFlQRV9NSUksXG4rXHRcdFx0XHRcdCAgIFlUOTIyWF9QSFlfUkVHX1NQQUNFX1VTWEdNSUkpO1xuK1x0aWYgKGFkZHIgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXM7XG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfcmVhZChwcml2LCBhZGRyLCAweDAsIFx1MDAyNmRhdGEpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdGRhdGEgfD0gMSBcdTAwM2NcdTAwM2MgMTU7XG4rXHRyZXMgPSB5dDkyMXhfaW50aWZfd3JpdGUocHJpdiwgYWRkciwgMHgwLCBkYXRhKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludFxuK3l0OTIyeF9wb3J0X2NvbmZpZyhzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgbW9kZSxcbitcdFx0ICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRpbnQgYWRkcjtcbitcdHUxNiBkYXRhO1xuK1x0aW50IHJlcztcbitcbitcdGFkZHIgPSB5dDkyMnhfaW50ZXJuYWxfcGh5YWRkcl9nZXQocG9ydCxcbitcdFx0XHRcdFx0ICAgWVQ5MjJYX1BIWV9SRUdfVFlQRV9TRFNfQ09NTU9OX0VYVCxcbitcdFx0XHRcdFx0ICAgWVQ5MjJYX1BIWV9SRUdfU1BBQ0VfU0dNSUkpO1xuK1x0aWYgKGFkZHIgXHUwMDNjIDApXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0c3dpdGNoIChpbnRlcmZhY2UpIHtcbitcdC8qIFNFUkRFUyAqL1xuK1x0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfU0dNSUk6XG4rXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDBCQVNFWDpcbitcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDpcbitcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDpcbitcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XG4rXHRcdHJlcyA9IHl0OTIyeF9wb3J0X3Nkc19pbml0KHByaXYsIHBvcnQsIGludGVyZmFjZSk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcbitcdFx0YWRkciA9IHl0OTIyeF9pbnRlcm5hbF9waHlhZGRyX2dldFxuK1x0XHRcdChwb3J0LCBZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhULFxuK1x0XHRcdCBZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSk7XG4rXHRcdGlmIChhZGRyIFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0XHRyZXMgPSB5dDkyMnhfaW50aWZfZXh0X3JlYWQocHJpdiwgYWRkciwgWVQ5MjJYX1BPUlRfU0RTX01PREUsXG4rXHRcdFx0XHRcdCAgICBcdTAwMjZkYXRhKTtcbitcdFx0aWYgKHJlcylcbitcdFx0XHRyZXR1cm4gcmVzO1xuK1xuK1x0XHRkYXRhIFx1MDAyNj0gKH4weDcgXHUwMDNjXHUwMDNjIDQpO1xuK1x0XHRzd2l0Y2ggKGludGVyZmFjZSkge1xuK1x0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSTpcbitcdFx0XHRkYXRhIHw9IEZJRUxEX1BSRVAoWVQ5MjJYX1BPUlRfU0RTX01PREVfTSxcbitcdFx0XHRcdFx0ICAgWVQ5MlhYX1NFUkRFU19NT0RFX1NHTUlJKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwQkFTRVg6XG4rXHRcdFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXG4rXHRcdFx0XHRcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV8xMDBCQVNFWCk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDpcbitcdFx0XHRkYXRhIHw9IEZJRUxEX1BSRVAoWVQ5MjJYX1BPUlRfU0RTX01PREVfTSxcbitcdFx0XHRcdFx0ICAgWVQ5MlhYX1NFUkRFU19NT0RFXzEwMDBCQVNFWCk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzI1MDBCQVNFWDpcbitcdFx0XHRkYXRhIHw9IEZJRUxEX1BSRVAoWVQ5MjJYX1BPUlRfU0RTX01PREVfTSxcbitcdFx0XHRcdFx0ICAgWVQ5MlhYX1NFUkRFU19NT0RFXzI1MDBCQVNFWCk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUk6XG4rXHRcdFx0ZGF0YSB8PSBGSUVMRF9QUkVQKFlUOTIyWF9QT1JUX1NEU19NT0RFX00sXG4rXHRcdFx0XHRcdCAgIFlUOTJYWF9TRVJERVNfTU9ERV9VU1hHTUlJKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHRyZXMgPSB5dDkyMXhfaW50aWZfZXh0X3dyaXRlKHByaXYsIGFkZHIsIFlUOTIyWF9QT1JUX1NEU19NT0RFLFxuK1x0XHRcdFx0XHQgICAgIGRhdGEpO1xuK1x0XHRpZiAocmVzKVxuK1x0XHRcdHJldHVybiByZXM7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWRcbit5dDkyMnhfcGh5bGlua19tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcbitcdFx0XHQgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHN0cnVjdCBkc2FfcG9ydCAqZHAgPSBkc2FfcGh5bGlua190b19wb3J0KGNvbmZpZyk7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcC1cdTAwM2Vkcyk7XG4rXHRpbnQgcG9ydCA9IGRwLVx1MDAzZWluZGV4O1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMnhfcG9ydF9jb25maWcocHJpdiwgcG9ydCwgbW9kZSwgc3RhdGUtXHUwMDNlaW50ZXJmYWNlKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcbitcdGlmIChyZXMpXG4rXHRcdGRldl9lcnIoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byAlcyBwb3J0ICVkOiAlaVxcblwiLCBcImNvbmZpZ1wiLFxuK1x0XHRcdHBvcnQsIHJlcyk7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHl0OTIyeF9waHlsaW5rX21hY19vcHMgPSB7XG4rXHQubWFjX2xpbmtfZG93blx0PSB5dDkyMnhfcGh5bGlua19tYWNfbGlua19kb3duLFxuK1x0Lm1hY19saW5rX3VwXHQ9IHl0OTIyeF9waHlsaW5rX21hY19saW5rX3VwLFxuK1x0Lm1hY19jb25maWdcdD0geXQ5MjJ4X3BoeWxpbmtfbWFjX2NvbmZpZyxcbit9O1xuK1xuK3N0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcbit5dDkyMnhfZHNhX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbitcdFx0XHQgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG0pXG4re1xuK1x0cmV0dXJuIERTQV9UQUdfUFJPVE9fWVQ5MjJYO1xuK31cbitcbitzdGF0aWMgdm9pZFxuK3l0OTIyeF9kc2FfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuK1x0XHRcdCAgICBzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4rXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm8gPSBwcml2LVx1MDAzZWluZm87XG4rXG4rXHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyA9IE1BQ19BU1lNX1BBVVNFIHwgTUFDX1NZTV9QQVVTRSB8XG4rXHRcdFx0XHQgICBNQUNfMTAgfCBNQUNfMTAwIHwgTUFDXzEwMDA7XG4rXG4rXHRpZiAoaW5mby1cdTAwM2VpbnRlcm5hbF9tYXNrIFx1MDAyNiBCSVQocG9ydCkpIHtcbitcdFx0aWYgKHBvcnQgXHUwMDNlPSA0IFx1MDAyNlx1MDAyNiBwb3J0IFx1MDAzYz0gNykge1xuK1x0XHRcdC8qIHBvcnQgNCB0byBwb3J0IDcsIGludGVybmFsIHV0cCAqL1xuK1x0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwsXG4rXHRcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzI1MDBGRDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJLFxuK1x0XHRcdFx0ICBjb25maWctXHUwMDNlc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuK1x0XHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwQkFTRVgsXG4rXHRcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsXG4rXHRcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8yNTAwQkFTRVgsXG4rXHRcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzI1MDBGRDtcbitcdFx0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFX1VTWEdNSUksXG4rXHRcdFx0XHQgIGNvbmZpZy1cdTAwM2VzdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdFx0Y29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzI1MDBGRDtcbitcdFx0XHRjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfNTAwMEZEO1xuK1x0XHRcdGNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwMEZEO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBleHRlcm5hbCBwb3J0IHdpbGwgYWRkZWQgbGF0ZXIgKi9cbitcdH1cbit9XG4rXG4rc3RhdGljIGludCB5dDkyMnhfcG9ydF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4rXHR1MzIgbWFzaztcbitcdHUzMiBjdHJsO1xuK1x0aW50IHJlcztcbitcbitcdC8qIGVuYWJsZSB1c2VyIHBvcnQgaXNvbGF0aW9uIGFuZCBkaXNhYmxlIGZkYiBsZWFybmluZyAqL1xuK1x0Y3RybCA9IH5wcml2LVx1MDAzZWNwdV9wb3J0c19tYXNrO1xuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfUE9SVG5fSVNPTEFUSU9OKHBvcnQpLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRtYXNrID0gWVQ5MjJYX1BPUlRfTEVBUk5fRElTO1xuK1x0cmVzID0geXQ5MjF4X3JlZ19zZXRfYml0cyhwcml2LCBZVDkyMlhfUE9SVG5fTEVBUk4ocG9ydCksIG1hc2spO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGlmIChkc2FfaXNfY3B1X3BvcnQoZHMsIHBvcnQpKSB7XG4rXHRcdGN0cmwgPSB+KHUzMikwO1xuK1x0XHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9QT1JUbl9JU09MQVRJT04ocG9ydCksXG4rXHRcdFx0XHQgICAgICAgY3RybCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHl0OTIyeF9kc2FfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxuK3tcbitcdHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdiA9IHRvX3l0OTIxeF9wcml2KGRzKTtcbitcdGludCByZXM7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0cmVzID0geXQ5MjJ4X3BvcnRfc2V0dXAocHJpdiwgcG9ydCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmVzO1xuK31cbitcbitzdGF0aWMgaW50IHl0OTIyeF9jaGlwX2RldGVjdChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gdG9fZGV2aWNlKHByaXYpO1xuK1x0Y29uc3Qgc3RydWN0IHl0OTIxeF9pbmZvICppbmZvO1xuK1x0dTMyIGNoaXBpZDtcbitcdHUzMiBtYWpvcjtcbitcdGludCByZXM7XG4rXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3JlYWQocHJpdiwgWVQ5MjFYX0NISVBfSUQsIFx1MDAyNmNoaXBpZCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0bWFqb3IgPSBGSUVMRF9HRVQoWVQ5MjFYX0NISVBfSURfTUFKT1IsIGNoaXBpZCk7XG4rXHRmb3IgKGluZm8gPSB5dDkyMXhfaW5mb3M7IGluZm8tXHUwMDNlbmFtZTsgaW5mbysrKVxuK1x0XHRpZiAoaW5mby1cdTAwM2VtYWpvciA9PSBtYWpvcilcbitcdFx0XHRicmVhaztcbitcdGlmICghaW5mby1cdTAwM2VuYW1lKSB7XG4rXHRcdGRldl9lcnIoZGV2LCBcIlVuZXhwZWN0ZWQgY2hpcGlkIDB4JXhcXG5cIiwgY2hpcGlkKTtcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXHR9XG4rXHRwcml2LVx1MDAzZWluZm8gPSBpbmZvO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfcmVzZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHUzMiB2YWw7XG4rXHRpbnQgcmVzO1xuK1xuK1x0cmVzID0geXQ5MjJ4X2NoaXBfZGV0ZWN0KHByaXYpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdC8qIFJlc2V0ICovXG4rXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIxWF9SU1QsIFlUOTIxWF9SU1RfSFcpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGZzbGVlcChZVDkyMVhfUlNUX0RFTEFZX1VTKTtcbitcbitcdHZhbCA9IDA7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3dhaXQocHJpdiwgWVQ5MjFYX1JTVCwgfjAsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfc2V0dXBfZHNhKHN0cnVjdCB5dDkyMXhfcHJpdiAqcHJpdilcbit7XG4rXHR1bnNpZ25lZCBsb25nIGNwdV9wb3J0c19tYXNrO1xuK1x0dTMyIGN0cmw7XG4rXHRpbnQgcG9ydDtcbitcdGludCByZXM7XG4rXG4rXHRjdHJsID0gR0VOTUFTSyg5LCAwKTtcbitcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0ZJTFRFUl9VTktfVUNBU1QsIGN0cmwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdGN0cmwgPSAwO1xuK1x0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHByaXYtXHUwMDNlY2hpcF9pbmZvLVx1MDAzZXBvcnRzOyBpKyspXG4rXHRcdGN0cmwgfD0gWVQ5MjJYX0FDVF9VTktfQUNUbl9UUkFQKGkpO1xuK1x0Y3B1X3BvcnRzX21hc2sgPSBwcml2LVx1MDAzZWNwdV9wb3J0c19tYXNrO1xuK1x0Zm9yX2VhY2hfc2V0X2JpdChwb3J0LCBcdTAwMjZjcHVfcG9ydHNfbWFzaywgcHJpdi1cdTAwM2VjaGlwX2luZm8tXHUwMDNlcG9ydHMpIHtcbitcdFx0Y3RybCBcdTAwMjY9IH5ZVDkyMlhfQUNUX1VOS19BQ1RuX00ocG9ydCk7XG4rXHRcdGN0cmwgfD0gWVQ5MjJYX0FDVF9VTktfQUNUbl9EUk9QKHBvcnQpO1xuK1x0fVxuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQUNUX1VOS19VQ0FTVCwgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQUNUX1VOS19NQ0FTVCwgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ5MjJ4X2NoaXBfc2V0dXAoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHUzMiBjdHJsO1xuK1x0aW50IHJlcztcbitcbitcdGN0cmwgPSBZVDkyMlhfRlVOQ19NSUIgfCBZVDkyMlhfRlVOQ19BQ0w7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3NldF9iaXRzKHByaXYsIFlUOTIxWF9GVU5DLCBjdHJsKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRyZXMgPSB5dDkyMnhfY2hpcF9zZXR1cF9kc2EocHJpdik7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ5MjJ4X2NwdV90YWdfbW9kZV9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShwcml2KTtcbitcdHUxNiBldGhfcF90YWc7XG4rXHR1MzIgdmFsO1xuK1x0dTMyIHZhbDE7XG4rXHRpbnQgcmVzO1xuK1xuK1x0LyogY3B1IHRhZyBtb2RlIHNldCAqL1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIyWF9DUFVfVEFHX1JYX0NUUkwsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIyWF9DUFVfVEFHX1RYX0NUUkwsIFx1MDAyNnZhbDEpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHZhbCBcdTAwMjY9IH5ZVDkyMlhfQ1BVX1RBR19SWF9NT0RFO1xuK1x0dmFsMSBcdTAwMjY9IH5ZVDkyMlhfQ1BVX1RBR19UWF9NT0RFO1xuK1x0dmFsMSBcdTAwMjY9IH5ZVDkyMlhfQ1BVX1RBR19UWF9UWVBFO1xuK1x0cmVzID0geXQ5MjF4X3JlZ193cml0ZShwcml2LCBZVDkyMlhfQ1BVX1RBR19SWF9DVFJMLCB2YWwpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjJYX0NQVV9UQUdfVFhfQ1RSTCwgdmFsMSk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0LyogdHBpZCBjaGVjayAqL1xuK1x0cmVzID0geXQ5MjF4X3JlZ19yZWFkKHByaXYsIFlUOTIxWF9DUFVfVEFHX1RQSUQsIFx1MDAyNnZhbCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1x0ZXRoX3BfdGFnID0gRklFTERfR0VUKFlUOTIxWF9DUFVfVEFHX1RQSURfVFBJRF9NLCB2YWwpO1xuK1x0aWYgKGV0aF9wX3RhZyAhPSBFVEhfUF9ZVDkyMVgpIHtcbitcdFx0ZGV2X2VycihkZXYsIFwiVGFnIHR5cGUgMHgleCAhPSAweCV4XFxuXCIsIGV0aF9wX3RhZyxcbitcdFx0XHRFVEhfUF9ZVDkyMVgpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHl0OTIyeF9jcHVfcG9ydF9zZXQoc3RydWN0IHl0OTIxeF9wcml2ICpwcml2KVxuK3tcbitcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4rXHR1MzIgY3RybDtcbitcdGludCByZXM7XG4rXG4rXHQvKiBjcHUgdGFnIG1vZGUgKi9cbitcdHJlcyA9IHl0OTIyeF9jcHVfdGFnX21vZGVfc2V0KHByaXYpO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdC8qIEVuYWJsZSBEU0EgKi9cbitcdHByaXYtXHUwMDNlY3B1X3BvcnRzX21hc2sgPSBkc2FfY3B1X3BvcnRzKGRzKTtcbitcdGN0cmwgPSBZVDkyMVhfRVhUX0NQVV9QT1JUX1RBR19FTiB8IFlUOTIxWF9FWFRfQ1BVX1BPUlRfUE9SVF9FTiB8XG4rXHQgICAgICAgWVQ5MjFYX0VYVF9DUFVfUE9SVF9QT1JUKF9fZmZzKHByaXYtXHUwMDNlY3B1X3BvcnRzX21hc2spKTtcbitcdHJlcyA9IHl0OTIxeF9yZWdfd3JpdGUocHJpdiwgWVQ5MjFYX0VYVF9DUFVfUE9SVCwgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0LyogU2V0dXAgc29mdHdhcmUgc3dpdGNoICovXG4rXHRjdHJsID0gWVQ5MjJYX0NQVV9DT1BZX1RPX0VYVF9DUFU7XG4rXHRyZXMgPSB5dDkyMXhfcmVnX3dyaXRlKHByaXYsIFlUOTIyWF9DUFVfQ09QWSwgY3RybCk7XG4rXHRpZiAocmVzKVxuK1x0XHRyZXR1cm4gcmVzO1xuK1xuK1x0cmV0dXJuIHJlcztcbit9XG4rXG4rc3RhdGljIGludCB5dDkyMnhfZHNhX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSB0b195dDkyMXhfcHJpdihkcyk7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSB0b19kZXZpY2UocHJpdik7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gZGV2LVx1MDAzZW9mX25vZGU7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkO1xuK1x0aW50IHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMnhfY2hpcF9yZXNldChwcml2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHQvKiBSZWdpc3RlciB0aGUgaW50ZXJuYWwgbWRpbyBidXMuICovXG4rXHRjaGlsZCA9IG9mX2dldF9jaGlsZF9ieV9uYW1lKG5wLCBcIm1kaW9cIik7XG4rXHRpZiAoY2hpbGQpIHtcbitcdFx0cmVzID0geXQ5MjF4X21idXNfaW50X2luaXQocHJpdiwgY2hpbGQpO1xuK1x0XHRvZl9ub2RlX3B1dChjaGlsZCk7XG4rXHRcdGlmIChyZXMpXG4rXHRcdFx0cmV0dXJuIHJlcztcbitcdH1cbitcbitcdCAvKiBjcHUgcG9ydCBzZXQgKi9cbitcdCBtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0IHJlcyA9IHl0OTIyeF9jcHVfcG9ydF9zZXQocHJpdik7XG4rXHQgbXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlcmVnX2xvY2spO1xuK1x0aWYgKHJlcylcbitcdFx0cmV0dXJuIHJlcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXHRyZXMgPSB5dDkyMnhfY2hpcF9zZXR1cChwcml2KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXJlZ19sb2NrKTtcbitcdGlmIChyZXMpXG4rXHRcdHJldHVybiByZXM7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB5dDkyMnhfZHNhX3N3aXRjaF9vcHMgPSB7XG4rXHQvKiBwb3J0ICovXG4rXHQuZ2V0X3RhZ19wcm90b2NvbFx0PSB5dDkyMnhfZHNhX2dldF90YWdfcHJvdG9jb2wsXG4rXHQucGh5bGlua19nZXRfY2Fwc1x0PSB5dDkyMnhfZHNhX3BoeWxpbmtfZ2V0X2NhcHMsXG4rXHQucG9ydF9zZXR1cFx0XHQ9IHl0OTIyeF9kc2FfcG9ydF9zZXR1cCxcbitcdC8qIGNoaXAgKi9cbitcdC5zZXR1cFx0XHRcdD0geXQ5MjJ4X2RzYV9zZXR1cCxcbit9O1xuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeXQ5Mnh4X2NoaXBfaW5mbyB5dDkyeHhfY2hpcF9pbmZvX3RhYmxlW10gPSB7XG4rXHRbWVQ5MjE1XSA9IHtcbitcdFx0Lm1vZGUgPSBZVDkyMTUsXG4rXHRcdC5uYW1lID0gXCJtb3RvcmNvbW0geXQ5MjE1XCIsXG4rXHRcdC5wb3J0cyA9IFlUOTIxWF9QT1JUX05VTSxcbitcdFx0LmxhZ19pZCA9IFlUOTIxWF9MQUdfTlVNLFxuK1x0XHQuYWdlaW5nX3RpbWVfbWluID0gMSAqIDUwMDAsXG4rXHRcdC5hZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNTAwMCxcbitcdFx0LnN3aXRjaF9vcHMgPSBcdTAwMjZ5dDkyMXhfZHNhX3N3aXRjaF9vcHMsXG4rXHRcdC5tYWNfb3BzID0gXHUwMDI2eXQ5MjF4X3BoeWxpbmtfbWFjX29wcyxcbitcdH0sXG4rXHRbWVQ5MjI0XSA9IHtcbitcdFx0Lm1vZGUgPSBZVDkyMjQsXG4rXHRcdC5uYW1lID0gXCJtb3RvcmNvbW0geXQ5MjI0XCIsXG4rXHRcdC5wb3J0cyA9IFlUOTIyWF9QT1JUX05VTSxcbitcdFx0LmxhZ19pZCA9IFlUOTIyWF9MQUdfTlVNLFxuK1x0XHQuYWdlaW5nX3RpbWVfbWluID0gMSAqIDYwMDAsXG4rXHRcdC5hZ2VpbmdfdGltZV9tYXggPSBVMTZfTUFYICogNjAwMCxcbitcdFx0LnN3aXRjaF9vcHMgPSBcdTAwMjZ5dDkyMnhfZHNhX3N3aXRjaF9vcHMsXG4rXHRcdC5tYWNfb3BzID0gXHUwMDI2eXQ5MjJ4X3BoeWxpbmtfbWFjX29wcyxcbitcdH0sXG4rfTtcbitcbitzdGF0aWMgdm9pZCB5dDkyeHhfbWRpb19zaHV0ZG93bihzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4re1xuK1x0c3RydWN0IHl0OTIxeF9wcml2ICpwcml2ID0gbWRpb2Rldl9nZXRfZHJ2ZGF0YShtZGlvZGV2KTtcbitcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZHNhX3N3aXRjaF9zaHV0ZG93bihcdTAwMjZwcml2LVx1MDAzZWRzKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgeXQ5Mnh4X21kaW9fcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2Rldilcbit7XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYgPSBtZGlvZGV2X2dldF9kcnZkYXRhKG1kaW9kZXYpO1xuK1xuK1x0aWYgKCFwcml2KVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmb3IgKHNpemVfdCBpID0gQVJSQVlfU0laRShwcml2LVx1MDAzZXBvcnRzKTsgaS0tIFx1MDAzZSAwOyApIHtcbitcdFx0c3RydWN0IHl0OTIxeF9wb3J0ICpwcCA9IFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV07XG4rXG4rXHRcdGRpc2FibGVfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHAtXHUwMDNlbWliX3JlYWQpO1xuK1x0fVxuK1xuK1x0ZHNhX3VucmVnaXN0ZXJfc3dpdGNoKFx1MDAyNnByaXYtXHUwMDNlZHMpO1xuK1xuK1x0Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2VhY2xfYmxrcyk7IGkrKykge1xuK1x0XHRzdHJ1Y3QgeXQ5MjF4X2FjbF9ibGsgKmFjbGJsayA9IHByaXYtXHUwMDNlYWNsX2Jsa3NbaV07XG4rXG4rXHRcdGlmICghYWNsYmxrKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiBcdTAwM2MgQVJSQVlfU0laRShhY2xibGstXHUwMDNlcnVsZXMpOyBqKyspIHtcbitcdFx0XHRzdHJ1Y3QgeXQ5MjF4X2FjbF9ydWxlICphY2xydWxlID0gYWNsYmxrLVx1MDAzZXJ1bGVzW2pdO1xuK1xuK1x0XHRcdGlmICghYWNscnVsZSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdGt2ZnJlZShhY2xydWxlKTtcbitcdFx0fVxuK1x0XHRrdmZyZWUoYWNsYmxrKTtcbitcdH1cbitcdG11dGV4X2Rlc3Ryb3koXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ5Mnh4X21kaW9fcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuK3tcbitcdGNvbnN0IHN0cnVjdCB5dDkyeHhfY2hpcF9pbmZvICpjb21wYXRfaW5mbyA9IE5VTEw7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbitcdHN0cnVjdCB5dDkyMXhfcmVnX21kaW8gKm1kaW87XG4rXHRzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXY7XG4rXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG4rXG4rXHRjb21wYXRfaW5mbyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xuK1x0aWYgKCFjb21wYXRfaW5mbylcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIXByaXYpXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0bWRpbyA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqbWRpbyksIEdGUF9LRVJORUwpO1xuK1x0aWYgKCFtZGlvKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdG1kaW8tXHUwMDNlYnVzID0gbWRpb2Rldi1cdTAwM2VidXM7XG4rXHRtZGlvLVx1MDAzZWFkZHIgPSBtZGlvZGV2LVx1MDAzZWFkZHI7XG4rXHRtZGlvLVx1MDAzZXN3aXRjaGlkID0gMDtcbitcbitcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VyZWdfbG9jayk7XG4rXG4rXHRwcml2LVx1MDAzZWNoaXBfaW5mbyA9IGNvbXBhdF9pbmZvO1xuK1x0cHJpdi1cdTAwM2VyZWdfb3BzID0gXHUwMDI2eXQ5MjF4X3JlZ19vcHNfbWRpbztcbitcdHByaXYtXHUwMDNlcmVnX2N0eCA9IG1kaW87XG4rXG4rXHRkcyA9IFx1MDAyNnByaXYtXHUwMDNlZHM7XG4rXHRkcy1cdTAwM2VkZXYgPSBkZXY7XG4rXHRkcy1cdTAwM2Vhc3Npc3RlZF9sZWFybmluZ19vbl9jcHVfcG9ydCA9IHRydWU7XG4rXHRkcy1cdTAwM2Vkc2NwX3ByaW9fbWFwcGluZ19pc19nbG9iYWwgPSB0cnVlO1xuK1x0ZHMtXHUwMDNlcHJpdiA9IHByaXY7XG4rXHRkcy1cdTAwM2VvcHMgPSBjb21wYXRfaW5mby1cdTAwM2Vzd2l0Y2hfb3BzO1xuK1x0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWluID0gY29tcGF0X2luZm8tXHUwMDNlYWdlaW5nX3RpbWVfbWluO1xuK1x0ZHMtXHUwMDNlYWdlaW5nX3RpbWVfbWF4ID0gY29tcGF0X2luZm8tXHUwMDNlYWdlaW5nX3RpbWVfbWF4O1xuK1x0ZHMtXHUwMDNlcGh5bGlua19tYWNfb3BzID0gY29tcGF0X2luZm8tXHUwMDNlbWFjX29wcztcbitcdGRzLVx1MDAzZW51bV9sYWdfaWRzID0gY29tcGF0X2luZm8tXHUwMDNlbGFnX2lkO1xuK1x0ZHMtXHUwMDNlbnVtX3BvcnRzID0gY29tcGF0X2luZm8tXHUwMDNlcG9ydHM7XG4rXG4rXHRtZGlvZGV2X3NldF9kcnZkYXRhKG1kaW9kZXYsIHByaXYpO1xuK1xuK1x0cmV0dXJuIGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCB5dDkyeHhfb2ZfbWF0Y2hbXSA9IHtcbitcdHtcbitcdFx0LmNvbXBhdGlibGUgPSBcIm1vdG9yY29tbSx5dDkyMTVcIixcbitcdFx0LmRhdGEgPSBcdTAwMjZ5dDkyeHhfY2hpcF9pbmZvX3RhYmxlW1lUOTIxNV0sXG4rXHR9LFxuK1x0e1xuK1x0XHQuY29tcGF0aWJsZSA9IFwibW90b3Jjb21tLHl0OTIyNFwiLFxuK1x0XHQuZGF0YSA9IFx1MDAyNnl0OTJ4eF9jaGlwX2luZm9fdGFibGVbWVQ5MjI0XSxcbitcdH0sXG4gXHR7fVxuIH07XG4tTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgeXQ5MjF4X29mX21hdGNoKTtcbitNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB5dDkyeHhfb2ZfbWF0Y2gpO1xuIFxuLXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgeXQ5MjF4X21kaW9fZHJpdmVyID0ge1xuLVx0LnByb2JlID0geXQ5MjF4X21kaW9fcHJvYmUsXG4tXHQucmVtb3ZlID0geXQ5MjF4X21kaW9fcmVtb3ZlLFxuLVx0LnNodXRkb3duID0geXQ5MjF4X21kaW9fc2h1dGRvd24sXG4rc3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciB5dDkyeHhfbWRpb19kcml2ZXIgPSB7XG4rXHQucHJvYmUgPSB5dDkyeHhfbWRpb19wcm9iZSxcbitcdC5yZW1vdmUgPSB5dDkyeHhfbWRpb19yZW1vdmUsXG4rXHQuc2h1dGRvd24gPSB5dDkyeHhfbWRpb19zaHV0ZG93bixcbiBcdC5tZGlvZHJ2LmRyaXZlciA9IHtcbi1cdFx0Lm5hbWUgPSBZVDkyMVhfTkFNRSxcbi1cdFx0Lm9mX21hdGNoX3RhYmxlID0geXQ5MjF4X29mX21hdGNoLFxuK1x0XHQubmFtZSA9IFlUOTJYWF9OQU1FLFxuK1x0XHQub2ZfbWF0Y2hfdGFibGUgPSB5dDkyeHhfb2ZfbWF0Y2gsXG4gXHR9LFxuIH07XG4gXG4tbWRpb19tb2R1bGVfZHJpdmVyKHl0OTIxeF9tZGlvX2RyaXZlcik7XG4rbWRpb19tb2R1bGVfZHJpdmVyKHl0OTJ4eF9tZGlvX2RyaXZlcik7XG4gXG4gTU9EVUxFX0FVVEhPUihcIkRhdmlkIFlhbmcgXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXHUwMDNlXCIpO1xuLU1PRFVMRV9ERVNDUklQVElPTihcIkRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBTd2l0Y2hcIik7XG4rTU9EVUxFX0FVVEhPUihcIkt5bGUgU3dpdGNoIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXCIpO1xuK01PRFVMRV9ERVNDUklQVElPTihcIkRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBhbmQgWVQ5MjJ4IFN3aXRjaFwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmggYi9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbmluZGV4IDVmM2I5OWUxODljNDEuLjAzMDhlNmI5MTYxOGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS95dDkyMXguaFxuQEAgLTgzNyw2ICs4MzcsNyBAQCBlbnVtIHl0OTIxeF9mZGJfZW50cnlfc3RhdHVzIHtcbiBcbiAjZGVmaW5lIFlUOTIxNV9NQUpPUlx0MHg5MDAyXG4gI2RlZmluZSBZVDkyMThfTUFKT1JcdDB4OTAwMVxuKyNkZWZpbmUgWVQ5MjI0X01BSk9SXHQweDkwMDRcbiBcbiAvKiByZXF1aXJlZCBmb3IgYSBoYXJkIHJlc2V0ICovXG4gI2RlZmluZSBZVDkyMVhfUlNUX0RFTEFZX1VTXHQxMDAwMFxuQEAgLTg1Myw2ICs4NTQsOTYgQEAgZW51bSB5dDkyMXhfZmRiX2VudHJ5X3N0YXR1cyB7XG4gLyogOCBpbnRlcm5hbCArIDIgZXh0ZXJuYWwgKyAxIG1jdSAqL1xuICNkZWZpbmUgWVQ5MjFYX1BPUlRfTlVNXHRcdFx0MTFcbiBcbisvKiB5dDkyMnggcmVnaXN0ZXIgbGlzdHMgKi9cbisjZGVmaW5lIFlUOTJYWF9QQUdFX1NFTEVDVFx0MHgxZVxuKyNkZWZpbmUgWVQ5MlhYX1BBR0VcdFx0MHgxZlxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRuX0NUUkwocG9ydCkgICAgICAgICAgICAgICAgKDB4ODAwODAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfQ1RSTF9QQVVTRV9BTiAgICAgIEJJVCgxMClcbisjZGVmaW5lIFlUOTIyWF9QT1JUbl9TVEFUVVMocG9ydCkgICAgICAoMHg4MDIwMCArIDQgKiAocG9ydCkpXG4rI2RlZmluZSBZVDkyMlhfRU5fUEhZX09WRVJXUklURSAgICgweDgwMDQwKVxuKyNkZWZpbmUgWVQ5MjJYX0VOX1BIWV9WQUxVRSAgICAgICAoMHg4MDAzYylcbisvKiBDVFJMOiBmb3JjZSBvcCB0byBtYWtlIHNvZnQgY29uZmlndXJhdGlvbiBlZmZlY3RpdmUgKi9cbisjZGVmaW5lIFlUOTIyWF9QT1JUX0ZPUkNFX09QICAgICAgICAgICBCSVQoMTQpXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9DRkdfVFhfRU4gICAgICAgQklUKDEzKVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfQ0ZHX1JYX0VOICAgICAgIEJJVCgxMilcbisjZGVmaW5lIFlUOTIyWF9QT1JUX0ZDX0FOICAgICAgICAgICAgQklUKDExKVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfTElOS19BTiAgICAgICAgICAgIEJJVCgxMCkgIC8qIENUUkw6IGF1dG8gbmVnb3RpYXRpb24gKi9cbisjZGVmaW5lIFlUOTIyWF9QT1JUX0xJTksgICAgICAgICAgICAgICBCSVQoOSkgIC8qIENUUkw6IGxpbmsgc3RhdHVzICovXG4rI2RlZmluZSBZVDkyMlhfUE9SVF9IQUxGX1BBVVNFICAgICAgICAgQklUKDgpICAvKiBIYWxmLWR1cGxleCBiYWNrIHByZXNzdXJlIG1vZGUgKi9cbisjZGVmaW5lIFlUOTIyWF9QT1JUX0RVUExFWF9GVUxMICAgICAgICAgICAgICAgIEJJVCg3KVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfUlhfUEFVU0UgICAgICAgICAgIEJJVCg2KVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfVFhfUEFVU0UgICAgICAgICAgIEJJVCg1KVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfUlhfTUFDX0VOICAgICAgICAgIEJJVCg0KVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfVFhfTUFDX0VOICAgICAgICAgIEJJVCgzKVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfU1BFRURfTSAgICAgICAgICAgIEdFTk1BU0soMiwgMClcbisjZGVmaW5lIFlUOTIyWF9QT1JUX1NEU19NT0RFICAgICAgICAgICAweDQwMFxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfU0RTX01PREVfTSAgICAgICAgIEdFTk1BU0soNiwgNClcbisjZGVmaW5lIFlUOTJYWF9TRVJERVNfTU9ERV9TR01JSSAgICAgICAgICAgICAgICAgICAgICAgMFxuKyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFX1JFVlNHTUlJICAgICAgICAgICAgICAgICAgICAxXG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfMTAwMEJBU0VYICAgICAgICAgICAgICAgICAgIDJcbisjZGVmaW5lIFlUOTJYWF9TRVJERVNfTU9ERV8xMDBCQVNFWCAgICAgICAgICAgICAgICAgICAgM1xuKyNkZWZpbmUgWVQ5MlhYX1NFUkRFU19NT0RFXzI1MDBCQVNFWCAgICAgICAgICAgICAgICAgICA0XG4rI2RlZmluZSBZVDkyWFhfU0VSREVTX01PREVfVVNYR01JSSAgICAgICAgICAgICAgICAgICAgIDZcbisjZGVmaW5lIFlUOTIyWF9QT1JUX05VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA5XG4rLyogTEFHICovXG4rI2RlZmluZSBZVDkyMlhfTEFHX05VTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDRcbisvKiBJU08gKi9cbisjZGVmaW5lIFlUOTIyWF9QT1JUbl9JU09MQVRJT04ocG9ydCkgICAgICAgICAgICgweDQgKiAocG9ydCkgKyAweDE4MGQ4MClcbisvKiBGREIgKi9cbisjZGVmaW5lIFlUOTIyWF9QT1JUbl9MRUFSTihwb3J0KSAgICAgICAoMHgxODAzMDAgKyA0ICogKHBvcnQpKVxuKyNkZWZpbmUgWVQ5MjJYX1BPUlRfTEVBUk5fRElTICAgICAgICAgIEJJVCgxOClcbisvKiBHTE9CQUwgQ1RSTCAqL1xuKyNkZWZpbmUgIFlUOTIyWF9GVU5DX0FDTCAgICAgICAgICAgICAgIEJJVCg1KVxuKyNkZWZpbmUgIFlUOTIyWF9GVU5DX01JQiAgICAgICAgICAgICAgIEJJVCg0KVxuKy8qIENUUkwgUEtUICovXG4rI2RlZmluZSBZVDkyMlhfRklMVEVSX1VOS19VQ0FTVCAgICAgICAgICAgICAgICAgICAgICAgIDB4MTgwZWM4XG4rI2RlZmluZSBZVDkyMlhfQUNUX1VOS19VQ0FTVCAgICAgICAgICAgICAgICAgICAweDE4MGVkOFxuKyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfTUNBU1QgICAgICAgICAgICAgICAgICAgMHgxODBlZTBcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX01DQVNUX0JZUEFTU19EUk9QX1BJTSAgIEJJVCgyMilcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX01DQVNUX0JZUEFTU19EUk9QX01MRCAgIEJJVCgyMSlcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX01DQVNUX0JZUEFTU19EUk9QX0lHTVAgIEJJVCgyMClcbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX0FDVG5fTShwb3J0KSAgICAgICAgICAgIEdFTk1BU0soMiAqIChwb3J0KSArIDEsIDIgKiAocG9ydCkpXG4rI2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuKHBvcnQsIHgpICAgICAgICAgICAoKHgpIFx1MDAzY1x1MDAzYyAoMiAqIChwb3J0KSkpXG4rI2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX0ZPUldBUkQocG9ydCkgICAgICBZVDkyMlhfQUNUX1VOS19BQ1RuKHBvcnQsIDApICAvKiBmbG9vZCAqL1xuKyNkZWZpbmUgWVQ5MjJYX0FDVF9VTktfQUNUbl9UUkFQKHBvcnQpICAgICAgICAgWVQ5MjJYX0FDVF9VTktfQUNUbihwb3J0LCAzKSAgLyogc3RlZXIgdG8gQ1BVICovXG4rI2RlZmluZSBZVDkyMlhfQUNUX1VOS19BQ1RuX0RST1AocG9ydCkgICAgICAgICBZVDkyMlhfQUNUX1VOS19BQ1RuKHBvcnQsIDEpICAvKiBkaXNjYXJkICovXG4rLyogTkVWRVIgdXNlIHRoaXMgYWN0aW9uOyBzZWUgY29tbWVudHMgaW4gdGhlIHRhZyBkcml2ZXIgKi9cbisjZGVmaW5lIFlUOTIyWF9BQ1RfVU5LX0FDVG5fQ09QWShwb3J0KSAgICAgICAgIFlUOTIyWF9BQ1RfVU5LX0FDVG4ocG9ydCwgMikgIC8qIGZsb29kIGFuZCBjb3B5ICovXG4rXG4rLyogQ1BVIFBPUlQgKi9cbisjZGVmaW5lIFlUOTIyWF9DUFVfQ09QWVx0XHRcdDB4MTgxMTAwXG4rI2RlZmluZSBZVDkyMlhfQ1BVX0NPUFlfVE9fSU5UX0NQVVx0QklUKDEpXG4rI2RlZmluZSBZVDkyMlhfQ1BVX0NPUFlfVE9fRVhUX0NQVVx0QklUKDApXG4rI2RlZmluZSBZVDkyMlhfQ1BVX1RBR19SWF9DVFJMXHRcdDB4ODA1MDRcbisjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1JYX01PREVcdFx0QklUKDApXG4rI2RlZmluZSBZVDkyMlhfQ1BVX1RBR19UWF9DVFJMXHRcdDB4MTAwNzEwXG4rI2RlZmluZSBZVDkyMlhfQ1BVX1RBR19UWF9UWVBFXHRcdEJJVCgwKVxuKyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfTU9ERVx0XHRCSVQoMSlcbisjZGVmaW5lIFlUOTIyWF9DUFVfVEFHX1RYX0NUQUdfT1BcdEJJVCgyKVxuKyNkZWZpbmUgWVQ5MjJYX0NQVV9UQUdfVFhfU1RBR19PUFx0QklUKDMpXG4rXG4rZW51bSB5dDkyMnhfcGh5X3JlZ190eXBlIHtcbitcdFlUOTIyWF9QSFlfUkVHX1RZUEVfQ09NTU9OX0VYVCxcbitcdFlUOTIyWF9QSFlfUkVHX1RZUEVfUEhZX0NPTU1PTl9FWFQsXG4rXHRZVDkyMlhfUEhZX1JFR19UWVBFX1NEU19DT01NT05fRVhULFxuK1x0WVQ5MjJYX1BIWV9SRUdfVFlQRV9NSUksXG4rXHRZVDkyMlhfUEhZX1JFR19UWVBFX0VYVCxcbitcdFlUOTIyWF9QSFlfUkVHX1RZUEVfTU1EMSxcbitcdFlUOTIyWF9QSFlfUkVHX1RZUEVfTU1EMyxcbitcdFlUOTIyWF9QSFlfUkVHX1RZUEVfTU1ENyxcbitcdFlUOTIyWF9QSFlfUkVHX1RZUEVfTUFYXG4rfTtcbitcbitlbnVtIHl0OTIyeF9waHlfcmVnX3NwYWNlIHtcbitcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1BIWSxcbitcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1BIWV9UMSxcbitcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1BIWV9MRFMsXG4rXHRZVDkyMlhfUEhZX1JFR19TUEFDRV9TR01JSSxcbitcdFlUOTIyWF9QSFlfUkVHX1NQQUNFX1VTWEdNSUksXG4rXHRZVDkyMlhfUEhZX1JFR19TUEFDRV9RU0dNSUksXG4rXHRZVDkyMlhfUEhZX1JFR19TUEFDRV9NQVhcbit9O1xuK1xuICNkZWZpbmUgeXQ5MjF4X3BvcnRfaXNfaW50ZXJuYWwocG9ydCkgKChwb3J0KSBcdTAwM2MgOClcbiAjZGVmaW5lIHl0OTIxeF9wb3J0X2lzX2V4dGVybmFsKHBvcnQpICgocG9ydCkgPT0gOCB8fCAocG9ydCkgPT0gOSlcbiBcbkBAIC05NDUsOSArMTAzNiwyNiBAQCBzdHJ1Y3QgeXQ5MjF4X3JlZ19vcHMge1xuIFx0aW50ICgqd3JpdGUpKHZvaWQgKmNvbnRleHQsIHUzMiByZWcsIHUzMiB2YWwpO1xuIH07XG4gXG4rZW51bSB5dDkyeHhfbW9kZSB7XG4rXHRZVDkyMTUsXG4rXHRZVDkyMjQsXG4rfTtcbitcbitzdHJ1Y3QgeXQ5Mnh4X2NoaXBfaW5mbyB7XG4rXHRlbnVtIHl0OTJ4eF9tb2RlIG1vZGU7XG4rXHRjb25zdCBjaGFyICpuYW1lO1xuK1x0dW5zaWduZWQgaW50IHBvcnRzO1xuK1x0dW5zaWduZWQgaW50IGxhZ19pZDtcbitcdHVuc2lnbmVkIGludCBhZ2VpbmdfdGltZV9taW47XG4rXHR1bnNpZ25lZCBpbnQgYWdlaW5nX3RpbWVfbWF4O1xuK1x0Y29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzICpzd2l0Y2hfb3BzO1xuK1x0Y29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyAqbWFjX29wcztcbit9O1xuK1xuIHN0cnVjdCB5dDkyMXhfcHJpdiB7XG4gXHRzdHJ1Y3QgZHNhX3N3aXRjaCBkcztcbiBcbitcdGNvbnN0IHN0cnVjdCB5dDkyeHhfY2hpcF9pbmZvICpjaGlwX2luZm87XG4gXHRjb25zdCBzdHJ1Y3QgeXQ5MjF4X2luZm8gKmluZm87XG4gXHR1bnNpZ25lZCBpbnQgbWV0ZXJfc2xvdF9ucztcbiBcdHVuc2lnbmVkIGludCBwb3J0X3NoYXBlX3Nsb3RfbnM7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHNhLmggYi9pbmNsdWRlL25ldC9kc2EuaFxuaW5kZXggNmY3ZjVjMTdiNTMyMC4uMGMwMzNjYTY1YjkyMyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2RzYS5oXG4rKysgYi9pbmNsdWRlL25ldC9kc2EuaFxuQEAgLTYwLDYgKzYwLDcgQEAgc3RydWN0IHRjX2FjdGlvbjtcbiAjZGVmaW5lIERTQV9UQUdfUFJPVE9fTVhMODYyX1ZBTFVFXHRcdDMyXG4gI2RlZmluZSBEU0FfVEFHX1BST1RPX05FVENfVkFMVUVcdFx0MzNcbiAjZGVmaW5lIERTQV9UQUdfUFJPVE9fS1NaODQ2M19WQUxVRVx0XHQzNFxuKyNkZWZpbmUgRFNBX1RBR19QUk9UT19ZVDkyMlhfVkFMVUUgICAgICAgICAgICAgIDM1XG4gXG4gZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcbiBcdERTQV9UQUdfUFJPVE9fTk9ORVx0XHQ9IERTQV9UQUdfUFJPVE9fTk9ORV9WQUxVRSxcbkBAIC05Nyw2ICs5OCw3IEBAIGVudW0gZHNhX3RhZ19wcm90b2NvbCB7XG4gXHREU0FfVEFHX1BST1RPX01YTDg2Mlx0XHQ9IERTQV9UQUdfUFJPVE9fTVhMODYyX1ZBTFVFLFxuIFx0RFNBX1RBR19QUk9UT19ORVRDXHRcdD0gRFNBX1RBR19QUk9UT19ORVRDX1ZBTFVFLFxuIFx0RFNBX1RBR19QUk9UT19LU1o4NDYzXHRcdD0gRFNBX1RBR19QUk9UT19LU1o4NDYzX1ZBTFVFLFxuK1x0RFNBX1RBR19QUk9UT19ZVDkyMlhcdFx0PSBEU0FfVEFHX1BST1RPX1lUOTIyWF9WQUxVRSxcbiB9O1xuIFxuIHN0cnVjdCBkc2Ffc3dpdGNoO1xuZGlmZiAtLWdpdCBhL25ldC9kc2EvS2NvbmZpZyBiL25ldC9kc2EvS2NvbmZpZ1xuaW5kZXggZDVlNzI1YjkwZDc4NS4uZTRmZDNhOWE2NjIxMSAxMDA2NDRcbi0tLSBhL25ldC9kc2EvS2NvbmZpZ1xuKysrIGIvbmV0L2RzYS9LY29uZmlnXG5AQCAtMjE1LDEwICsyMTUsMTAgQEAgY29uZmlnIE5FVF9EU0FfVEFHX1hSUzcwMFhcbiBcdCAgU2F5IFkgb3IgTSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGFnZ2luZyBmcmFtZXMgZm9yXG4gXHQgIEFycm93IFNwZWVkQ2hpcHMgWFJTNzAweCBzd2l0Y2hlcyB0aGF0IHVzZSBhIHNpbmdsZSBieXRlIHRhZyB0cmFpbGVyLlxuIFxuLWNvbmZpZyBORVRfRFNBX1RBR19ZVDkyMVhcbi1cdHRyaXN0YXRlIFwiVGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlc1wiXG4rY29uZmlnIE5FVF9EU0FfVEFHX1lUOTJYWFxuK1x0dHJpc3RhdGUgXCJUYWcgZHJpdmVyIGZvciBNb3RvcmNvbW0gWVQ5MjF4IGFuZCBZVDkyMnggc3dpdGNoZXNcIlxuIFx0aGVscFxuIFx0ICBTYXkgWSBvciBNIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0YWdnaW5nIGZyYW1lcyBmb3Jcbi1cdCAgTW90b3Jjb21tIFlUOTIxeCBzd2l0Y2hlcy5cbitcdCAgTW90b3Jjb21tIFlUOTIxeCBhbmQgWVQ5MjJ4IHN3aXRjaGVzLlxuIFxuIGVuZGlmXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS9NYWtlZmlsZSBiL25ldC9kc2EvTWFrZWZpbGVcbmluZGV4IGI4YzI2NjdjZDE0YWEuLjJkNzJhMjVmZDk4NDYgMTAwNjQ0XG4tLS0gYS9uZXQvZHNhL01ha2VmaWxlXG4rKysgYi9uZXQvZHNhL01ha2VmaWxlXG5AQCAtNDIsNyArNDIsNyBAQCBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfU0pBMTEwNSkgKz0gdGFnX3NqYTExMDUub1xuIG9iai0kKENPTkZJR19ORVRfRFNBX1RBR19UUkFJTEVSKSArPSB0YWdfdHJhaWxlci5vXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfVEFHX1ZTQzczWFhfODAyMVEpICs9IHRhZ192c2M3M3h4XzgwMjFxLm9cbiBvYmotJChDT05GSUdfTkVUX0RTQV9UQUdfWFJTNzAwWCkgKz0gdGFnX3hyczcwMHgub1xuLW9iai0kKENPTkZJR19ORVRfRFNBX1RBR19ZVDkyMVgpICs9IHRhZ195dDkyMXgub1xuK29iai0kKENPTkZJR19ORVRfRFNBX1RBR19ZVDkyWFgpICs9IHRhZ195dDkyMXgub1xuIFxuICMgZm9yIHRyYWNpbmcgZnJhbWV3b3JrIHRvIGZpbmQgdHJhY2UuaFxuIENGTEFHU190cmFjZS5vIDo9IC1JJChzcmMpXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS90YWdfeXQ5MjF4LmMgYi9uZXQvZHNhL3RhZ195dDkyMXguY1xuaW5kZXggMjk0Nzg0YWI2Njk0Yi4uYTMwMTJlYzM5ODY4NiAxMDA2NDRcbi0tLSBhL25ldC9kc2EvdGFnX3l0OTIxeC5jXG4rKysgYi9uZXQvZHNhL3RhZ195dDkyMXguY1xuQEAgLTEsOCArMSwxMCBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gLypcbiAgKiBNb3RvcmNvbW0gWVQ5MjF4IFN3aXRjaCBFeHRlbmRlZCBDUFUgUG9ydCBUYWdnaW5nXG4rICogTW90b3Jjb21tIFlUOTIyeCBTd2l0Y2ggRXh0ZW5kZWQgQ1BVIFBvcnQgVGFnZ2luZ1xuICAqXG4gICogQ29weXJpZ2h0IChjKSAyMDI1IERhdmlkIFlhbmcgXHUwMDNjbW15YW5nZmxAZ21haWwuY29tXHUwMDNlXG4rICogQ29weXJpZ2h0IChjKSAyMDI2IEt5bGUgc3dpdGNoIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICpcbiAgKiArLS0tLSstLS0tKy0tLS0tLS0rLS0tLS0rLS0tLSstLS0tLS0tLS1cbiAgKiB8IERBIHwgU0EgfCBUYWdFVCB8IFRhZyB8IEVUIHwgUGF5bG9hZCAuLi5cbkBAIC0xNjYsOCArMTY4LDExNSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzIHl0OTIxeF9uZXRkZXZfb3BzID0ge1xuIFx0Lm5lZWRlZF9oZWFkcm9vbSA9IFlUOTIxWF9UQUdfTEVOLFxuIH07XG4gXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFwiRFNBIHRhZyBkcml2ZXIgZm9yIE1vdG9yY29tbSBZVDkyMXggc3dpdGNoZXNcIik7XG4tTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4rRFNBX1RBR19EUklWRVIoeXQ5MjF4X25ldGRldl9vcHMpO1xuIE1PRFVMRV9BTElBU19EU0FfVEFHX0RSSVZFUihEU0FfVEFHX1BST1RPX1lUOTIxWCwgWVQ5MjFYX1RBR19OQU1FKTtcbiBcbi1tb2R1bGVfZHNhX3RhZ19kcml2ZXIoeXQ5MjF4X25ldGRldl9vcHMpO1xuKy8qIFRvIGRlZmluZSB0aGUgZnJvbSBjcHUgdGFnIGZvcm1hdCA4IGJ5dGVzOlxuKyAqXG4rICogMCAxIDIgMyA0IDUgNiA3IHwwIDEgMiAzIDQgNSA2IDdcbisgKnxcdTAwM2MtLS0tLS0tLS0tLS1UUElEIDB4OTk4OC0tLS0tLS1cdTAwM2V8XG4rICp8XHUwMDNjLS1SRVNFUlZFLS1cdTAwM2V8XHUwMDNjLS0tLS1EU1QgUE9SLS0tLVx1MDAzZXxcbisgKnwtfFx1MDAzYy0tLS0tLS0tLVJFU0VSVkUtLS0tLS0tLS0tLS1cdTAwM2V8XG4rICp8XHUwMDNjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHUwMDNlfFxuKyAqL1xuKyNkZWZpbmUgWVQ5MjJYX1RBR19OQU1FXHRcdFx0XCJ5dDkyMnhcIlxuKyNkZWZpbmUgWVQ5MjJYX1RBR19QT1JUTUFTS18wXHRcdEJJVCgxNSlcbisjZGVmaW5lIFlUOTIyWF9UQUdfUE9SVE1BU0tfTVx0XHRHRU5NQVNLKDgsIDApXG4rI2RlZmluZSBZVDkyMlhfVEFHX1BPUlRTKHgpXHRcdEZJRUxEX1BSRVAoWVQ5MjJYX1RBR19QT1JUTUFTS19NLCAoeCkpXG4rI2RlZmluZSBZVDkyMlhfVEFHX0ZPUkNFX0RTVFx0XHRCSVQoOSlcbisjZGVmaW5lIFlUOTIyWF9UQUdfUFJJT19NXHRcdEdFTk1BU0soMTIsIDEwKVxuKyNkZWZpbmUgWVQ5MjJYX1RBR19QUklPX0VOXHRcdEJJVCgxMylcbisjZGVmaW5lIFlUOTIyWF9UQUdfUFJJTyh4KVx0XHQoRklFTERfUFJFUChZVDkyMlhfVEFHX1BSSU9fTSwgKHgpKSB8IFlUOTIyWF9UQUdfUFJJT19FTilcbisjZGVmaW5lIFlUOTIyWF9UQUdfUlhfUE9SVF9NXHRcdEdFTk1BU0soNSwgMilcbisjZGVmaW5lIFlUOTIyWF9UQUdfUlhfUFJJT19NXHRcdEdFTk1BU0soMTUsIDEzKVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG4reXQ5MjJ4X3RhZ194bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4re1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcCA9IGRzYV91c2VyX3RvX3BvcnQobmV0ZGV2KTtcbitcdF9fYmUxNiAqdGFnO1xuK1x0dTE2IGN0cmw7XG4rXG4rXHRza2JfcHVzaChza2IsIFlUOTIxWF9UQUdfTEVOKTtcbitcdGRzYV9hbGxvY19ldHlwZV9oZWFkZXIoc2tiLCBZVDkyMVhfVEFHX0xFTik7XG4rXHR0YWcgPSBkc2FfZXR5cGVfaGVhZGVyX3Bvc190eChza2IpO1xuK1xuK1x0dGFnWzBdID0gaHRvbnMoRVRIX1BfWVQ5MjFYKTtcbitcdGlmIChkcC1cdTAwM2VpbmRleCAhPSAwKSB7XG4rXHRcdC8qIFBvcnQgaW5kZXggaXMgbm90IGVxdWFsIDAgaW4gdGFnWzFdICovXG4rXHRcdGN0cmwgPSBZVDkyMlhfVEFHX1BSSU8oc2tiLVx1MDAzZXByaW9yaXR5KSB8IFlUOTIyWF9UQUdfRk9SQ0VfRFNUIHxcbitcdFx0XHRZVDkyMlhfVEFHX1BPUlRTKGRzYV94bWl0X3BvcnRfbWFzayhza2IsIG5ldGRldikgLSAxKTtcbitcdFx0dGFnWzFdID0gaHRvbnMoY3RybCk7XG4rXHRcdHRhZ1syXSA9IDA7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBQb3J0IDAgaW4gYml0MTUgaW4gdGFnWzJdICovXG4rXHRcdGN0cmwgPSBZVDkyMlhfVEFHX1BSSU8oc2tiLVx1MDAzZXByaW9yaXR5KSB8IFlUOTIyWF9UQUdfRk9SQ0VfRFNUO1xuK1x0XHR0YWdbMV0gPSBodG9ucyhjdHJsKTtcbitcdFx0Y3RybCA9IFlUOTIyWF9UQUdfUE9SVE1BU0tfMDtcbitcdFx0dGFnWzJdID0gaHRvbnMoY3RybCk7XG4rXHR9XG4rXHR0YWdbM10gPSAwO1xuK1xuK1x0cmV0dXJuIHNrYjtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBza19idWZmICpcbit5dDkyMnhfdGFnX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuK3tcbitcdHVuc2lnbmVkIGludCBwb3J0O1xuK1x0X19iZTE2ICp0YWc7XG4rXHR1MTYgcng7XG4rXG4rXHRpZiAodW5saWtlbHkoIXBza2JfbWF5X3B1bGwoc2tiLCBZVDkyMVhfVEFHX0xFTikpKSB7XG4rXHRcdGtmcmVlX3NrYihza2IpO1xuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbitcdHRhZyA9IGRzYV9ldHlwZV9oZWFkZXJfcG9zX3J4KHNrYik7XG4rXG4rXHRpZiAodW5saWtlbHkodGFnWzBdICE9IGh0b25zKEVUSF9QX1lUOTIxWCkpKSB7XG4rXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKFx1MDAyNm5ldGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgIFwiVW5leHBlY3RlZCBFdGhlclR5cGUgMHglMDR4XFxuXCIsXG4rXHRcdFx0XHQgICAgIG50b2hzKHRhZ1swXSkpO1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHQvKiBMb2NhdGUgd2hpY2ggcG9ydCB0aGlzIGlzIGNvbWluZyBmcm9tICovXG4rXHRyeCA9IG50b2hzKHRhZ1syXSk7XG4rXHRwb3J0ID0gRklFTERfR0VUKFlUOTIyWF9UQUdfUlhfUE9SVF9NLCByeCk7XG4rXHRza2ItXHUwMDNlZGV2ID0gZHNhX2NvbmR1aXRfZmluZF91c2VyKG5ldGRldiwgMCwgcG9ydCk7XG4rXHRpZiAodW5saWtlbHkoIXNrYi1cdTAwM2VkZXYpKSB7XG4rXHRcdGRldl93YXJuX3JhdGVsaW1pdGVkKFx1MDAyNm5ldGRldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgICAgIFwiQ291bGRuJ3QgZGVjb2RlIHNvdXJjZSBwb3J0ICV1XFxuXCIsIHBvcnQpO1xuK1x0XHRrZnJlZV9za2Ioc2tiKTtcbitcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4rXHQvKiBSZW1vdmUgdGFnIGFuZCB1cGRhdGUgY2hlY2tzdW0gKi9cbitcdHNrYl9wdWxsX3Jjc3VtKHNrYiwgWVQ5MjFYX1RBR19MRU4pO1xuK1x0ZHNhX3N0cmlwX2V0eXBlX2hlYWRlcihza2IsIFlUOTIxWF9UQUdfTEVOKTtcbitcbitcdHJldHVybiBza2I7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgeXQ5MjJ4X25ldGRldl9vcHMgPSB7XG4rXHQubmFtZSAgID0gWVQ5MjJYX1RBR19OQU1FLFxuK1x0LnByb3RvICA9IERTQV9UQUdfUFJPVE9fWVQ5MjJYLFxuK1x0LnhtaXQgICA9IHl0OTIyeF90YWdfeG1pdCxcbitcdC5yY3YgICAgPSB5dDkyMnhfdGFnX3JjdixcbitcdC5uZWVkZWRfaGVhZHJvb20gPSBZVDkyMVhfVEFHX0xFTixcbit9O1xuK1xuK0RTQV9UQUdfRFJJVkVSKHl0OTIyeF9uZXRkZXZfb3BzKTtcbitNT0RVTEVfQUxJQVNfRFNBX1RBR19EUklWRVIoRFNBX1RBR19QUk9UT19ZVDkyMlgsIFlUOTIyWF9UQUdfTkFNRSk7XG4rXG4rc3RhdGljIHN0cnVjdCBkc2FfdGFnX2RyaXZlciAqZHNhX3RhZ19kcml2ZXJfYXJyYXlbXSA9IHtcbitcdFx1MDAyNkRTQV9UQUdfRFJJVkVSX05BTUUoeXQ5MjF4X25ldGRldl9vcHMpLFxuK1x0XHUwMDI2RFNBX1RBR19EUklWRVJfTkFNRSh5dDkyMnhfbmV0ZGV2X29wcyksXG4rfTtcbittb2R1bGVfZHNhX3RhZ19kcml2ZXJzKGRzYV90YWdfZHJpdmVyX2FycmF5KTtcbitcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJEU0EgdGFnIGRyaXZlciBmb3IgTW90b3Jjb21tIFlUOTIxeCBhbmQgWVQ5MjJ4IHN3aXRjaGVzXCIpO1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuK1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjE6MjcuMzE1MDU2NTE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwNTU1NTg0NTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZT8gQSBEZWVwIERpdmUgaW50byB0aGUgWVQ5MjI0IERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFkZGluZyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIyNCBzd2l0Y2ggY2hpcCB0byB0aGUgYHl0OTIxeGAgRFNBIGRyaXZlci4gIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzIGFsd2F5cywgXCJIb3cgY2FuIEkgYWN0dWFsbHkgKnJlYWNoKiB0aGlzIGNvZGUgaW4gYSB0ZXN0aW5nIGVudmlyb25tZW50P1wiIEl0J3MgbW9kaWZ5aW5nIGB5dDkyMXguY2AsIGB5dDkyMXguaGAsIGB0YWdfeXQ5MjF4LmNgLCBhbmQgdGhlIEtjb25maWcvTWFrZWZpbGVzIOKAkyBhbGwgZ29vZCBzdHVmZiwgYnV0IHVzZWxlc3MgaWYgSSBjYW4ndCB0cmlnZ2VyIGl0LlxuXG5SaWdodCwgc28gaXQncyBhbiBNRElPIGRyaXZlciAoYHl0OTJ4eF9tZGlvX2RyaXZlcmApLiBJdCByZWdpc3RlcnMgdXNpbmcgYG1kaW9fbW9kdWxlX2RyaXZlcigpYC4gVGhhdCBtZWFucyBEZXZpY2UgVHJlZSBpcyBwcm9iYWJseSB0aGUga2V5IHRvIGdldHRpbmcgaXQgcHJvYmVkLiAgQ2FuIEkgZW11bGF0ZSB0aGF0PyBDYW4gSSBmYWtlIGl0IHdpdGggYSBzb2Z0d2FyZSBNRElPIGJ1cz8gU3l6a2FsbGVyJ3MgZ3JlYXQsIGJ1dCBkb2VzIGl0IGhhdmUgYW55IE1ESU8gbWFnaWM/ICBObywgbm90IGEgZ2VuZXJpYyBmdXp6ZXIgdW5sZXNzIGl0J3Mgc3BlY2lmaWMgdG8gdGhlIHN1YnN5c3RlbS4gSG1tLCBzeXprYWxsZXIgKmNhbiogcHJvYmUgZGV2aWNlcyBpZiBpdCBoYXMgRFQgbm9kZXMsIGJ1dCBubyBhcmJpdHJhcnkgTURJTyBub2Rlcy4gRGFtbi5cblxuT2theSwgbGV0J3Mgc3RlcCBiYWNrLiBBbnkgb3RoZXIgZW50cnkgcG9pbnQ/ICBIb3cgYWJvdXQgYHl0OTJ4eF9tZGlvX3Byb2JlYD8gIEl0IHJlcXVpcmVzIGBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoKWAsIHNvIGl0J3MgZGVmaW5pdGVseSB0aWVkIHRvIERldmljZSBUcmVlIChgeXQ5Mnh4X29mX21hdGNoYCkuICBTbywgd2l0aG91dCBhIHJlYWwgZGV2aWNlIG9yIGEgY3VzdG9tIFFFTVUgc2V0dXAsIEknbSBzdHVjay4gIFN5emthbGxlcidzIGBzeXpfZGV2bGlua2AgaXNuJ3QgZ29pbmcgdG8gaGVscC4gIElzIHRoZXJlIGV2ZW4gYW55IGVtdWxhdGlvbiBmb3IgdGhlIFlUOTIxNS9ZVDkyMjQgaW4gUUVNVT8gTm8uIFNvLCBzdGFuZGFyZCBRRU1VL0dDRSBlbnZpcm9ubWVudHMgYXJlIGRlYWQgZW5kcyBmb3IgdGhpcyBwcm9iZSBmdW5jdGlvbi4gVGhlIGRyaXZlcidzIHByb2JlIGNvZGUgbG9va3MgdW5yZWFjaGFibGUgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudC5cblxuQWxyaWdodCwgbGV0J3MgbG9vayBkZWVwZXIuICBgeXQ5MjJ4X3RhZ194bWl0YCBhbmQgYHl0OTIyeF90YWdfcmN2YCBhcmUgaW4gYHRhZ195dDkyMXguY2AuIERTQSB0YWcgZHJpdmVycyBhcmUgb2Z0ZW4gYSBzZXBhcmF0ZSBiZWFzdC4gT2theSwgc28gRFNBIHRhZ2dlcnMgKmNvdWxkKiBiZSBoaXQgaWYgYSBEU0Egc3dpdGNoIGlzIGluc3RhbnRpYXRlZCwgb3IgaWYgSSBjYW4gc2V0IHRoZSB0YWcgcHJvdG9jb2wgb24gYSBnZW5lcmljIERTQSBzd2l0Y2ggbGlrZSBgZHNhX2xvb3BgIG9yIGBzYW5kYm94YC4gTm93IHdlJ3JlIGdldHRpbmcgc29tZXdoZXJlLiBXYWl0LCBJIGNhbiBhY3R1YWxseSAqY2hhbmdlKiB0aGUgdGFnIHByb3RvY29sIG9uIGBkc2FfbG9vcGA/ICBZZXMhIFRpbWUgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jYFxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTQ2NiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjIxOjM5LjM3MDYxODIwNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUzODE0MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV9sb29wXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdD0xNTk9YWxsIGF0dGFjaGVkIHN3aXRjaCBwb3J0cyBtdXN0IGJlIGRvd24gd2hpbGUgZG9pbmcgdGhpcykuXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0LTE2MC1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3Q6MTYxOkl0IGlzIGRlc2lyYWJsZSB0aGF0IGFsbCB0YWdnaW5nIHByb3RvY29scyBhcmUgdGVzdGFibGUgd2l0aCB0aGUgYGBkc2FfbG9vcGBgXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RzYS9kc2EucnN0LTE2Mi1tb2NrdXAgZHJpdmVyLCB3aGljaCBjYW4gYmUgYXR0YWNoZWQgdG8gYW55IG5ldHdvcmsgaW50ZXJmYWNlLiBUaGUgZ29hbCBpcyB0aGF0XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvTWFrZWZpbGU9Mz1iY20tc2YyLW9ianNcXHRcXHRcXHQ6PSBiY21fc2YyLm8gYmNtX3NmMl9jZnAub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZTo0Om9iai0kKENPTkZJR19ORVRfRFNBX0xPT1ApXFx0Kz0gZHNhX2xvb3Aub1xcbmRyaXZlcnMvbmV0L2RzYS9NYWtlZmlsZS01LW9iai0kKENPTkZJR19ORVRfRFNBX0tTODk5NSkgXFx0Kz0ga3M4OTk1Lm9cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1OnN0cnVjdCBkc2FfbG9vcF92bGFuIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNi1cXHR1MTYgbWVtYmVycztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMwOnN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxLVxcdGNoYXIgbmFtZVtFVEhfR1NUUklOR19MRU5dO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzQtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU6ZW51bSBkc2FfbG9vcF9taWJfY291bnRlcnMge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2LVxcdERTQV9MT09QX1BIWV9SRUFEX09LLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM6c3RydWN0IGRzYV9sb29wX3BvcnQge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ0OlxcdHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgbWliW19fRFNBX0xPT1BfQ05UX01BWF07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDUtXFx0dTE2IHB2aWQ7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTpzdHJ1Y3QgZHNhX2xvb3BfcHJpdiB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTAtXFx0c3RydWN0IG1paV9idXNcXHQqYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxLVxcdHVuc2lnbmVkIGludFxcdHBvcnRfYmFzZTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MjpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiB2bGFuc1tWTEFOX05fVklEXTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01My1cXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjU0OlxcdHN0cnVjdCBkc2FfbG9vcF9wb3J0IHBvcnRzW0RTQV9NQVhfUE9SVFNdO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTU1LX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTc6c3RydWN0IGRzYV9sb29wX3BkYXRhIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01OC1cXHQvKiBNdXN0IGJlIGZpcnN0LCBzdWNoIHRoYXQgZHNhX3JlZ2lzdGVyX3N3aXRjaCgpIGNhbiBhY2Nlc3MgdGhpc1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNjYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Njc6c3RhdGljIHN0cnVjdCBkc2FfbG9vcF9taWJfZW50cnkgZHNhX2xvb3BfbWlic1tdID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTY4LVxcdFtEU0FfTE9PUF9QSFlfUkVBRF9PS11cXHQ9IHsgXFxcInBoeV9yZWFkX29rXFxcIiwgfSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTc1PXN0YXRpYyBzdHJ1Y3QgbWRpb19kZXZpY2UgKnN3aXRjaF9tZGlvZGV2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTc2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjc3OmVudW0gZHNhX2xvb3BfZGV2bGlua19yZXNvdXJjZV9pZCB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNzgtXFx0RFNBX0xPT1BfREVWTElOS19QQVJBTV9JRF9OT05FLCAgLyogREVWTElOS19SRVNPVVJDRV9JRF9QQVJFTlRfVE9QICovXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy04MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4MjpzdGF0aWMgdTY0IGRzYV9sb29wX2RldmxpbmtfdnR1X2dldCh2b2lkICpwcml2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTgzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo4NDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg1LVxcdHVuc2lnbmVkIGludCBpLCBjb3VudCA9IDA7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6ODY6XFx0c3RydWN0IGRzYV9sb29wX3ZsYW4gKnZsO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTg3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6OTc6c3RhdGljIGludCBkc2FfbG9vcF9zZXR1cF9kZXZsaW5rX3Jlc291cmNlcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtOTgte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTk5LVxcdHN0cnVjdCBkZXZsaW5rX3Jlc291cmNlX3NpemVfcGFyYW1zIHNpemVfcGFyYW1zO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEwMDpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMDEtXFx0aW50IGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTExNS1cXHRcXHRcXHRcXHRcXHQgICAgICBEU0FfTE9PUF9ERVZMSU5LX1BBUkFNX0lEX1ZUVSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxMTY6XFx0XFx0XFx0XFx0XFx0ICAgICAgZHNhX2xvb3BfZGV2bGlua192dHVfZ2V0LCBwcyk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTMzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNDpzdGF0aWMgaW50IGRzYV9sb29wX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzUte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEzNjpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHMgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzctXFx0dW5zaWduZWQgaW50IGk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xMzktXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRzLVxcdTAwM2VudW1fcG9ydHM7IGkrKylcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDA6XFx0XFx0bWVtY3B5KHBzLVxcdTAwM2Vwb3J0c1tpXS5taWIsIGRzYV9sb29wX21pYnMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTQxOlxcdFxcdCAgICAgICBzaXplb2YoZHNhX2xvb3BfbWlicykpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Mi1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0NC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDU6XFx0cmV0dXJuIGRzYV9sb29wX3NldHVwX2RldmxpbmtfcmVzb3VyY2VzKGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNDYtfVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0Ny1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNDg6c3RhdGljIHZvaWQgZHNhX2xvb3BfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNTItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MTUzOnN0YXRpYyBpbnQgZHNhX2xvb3BfZ2V0X3NzZXRfY291bnQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgaW50IHNzZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTU0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE2MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZ2V0X3N0cmluZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0xNjItXFx0XFx0XFx0XFx0IHUzMiBzdHJpbmdzZXQsIHVpbnQ4X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTYzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNjQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTY1LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTczLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE3NDpzdGF0aWMgdm9pZCBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE3NS1cXHRcXHRcXHRcXHQgICAgICAgdWludDY0X3QgKmRhdGEpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxNzc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTc4LVxcdHVuc2lnbmVkIGludCBpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTgzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE4NDpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV9yZWFkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGludCByZWdudW0pXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg1LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoxODY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTk4LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE5OTpzdGF0aWMgaW50IGRzYV9sb29wX3BoeV93cml0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwMC1cXHRcXHRcXHQgICAgICBpbnQgcmVnbnVtLCB1MTYgdmFsdWUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAxLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyMDI6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjAzLVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjE0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjIxNTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfYnJpZGdlX2pvaW4oc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMTYtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMjUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjI2OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfYnJpZGdlX2xlYXZlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjI3LVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZHNhX2JyaWRnZSBicmlkZ2UpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMzItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjMzOnN0YXRpYyB2b2lkIGRzYV9sb29wX3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzNC1cXHRcXHRcXHRcXHRcXHR1OCBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIzOS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNDA6c3RhdGljIGludCBkc2FfbG9vcF9wb3J0X3ZsYW5fZmlsdGVyaW5nKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjQxLVxcdFxcdFxcdFxcdFxcdGJvb2wgdmxhbl9maWx0ZXJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNDktXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjUwOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2FkZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1MS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd2l0Y2hkZXZfb2JqX3BvcnRfdmxhbiAqdmxhbixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI1NS1cXHRib29sIHB2aWQgPSB2bGFuLVxcdTAwM2VmbGFncyBcXHUwMDI2IEJSSURHRV9WTEFOX0lORk9fUFZJRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNTY6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU3LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjU5LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjgyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI4MzpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODQtXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dpdGNoZGV2X29ial9wb3J0X3ZsYW4gKnZsYW4pXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yODYtXFx0Ym9vbCB1bnRhZ2dlZCA9IHZsYW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgQlJJREdFX1ZMQU5fSU5GT19VTlRBR0dFRDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyODc6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzID0gZHMtXFx1MDAzZXByaXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg4LVxcdHUxNiBwdmlkID0gcHMtXFx1MDAzZXBvcnRzW3BvcnRdLnB2aWQ7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjg5LVxcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcy1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjI5MDpcXHRzdHJ1Y3QgZHNhX2xvb3BfdmxhbiAqdmw7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkxLVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEwLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMxMTpzdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfY2hhbmdlX210dShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMxMi1cXHRcXHRcXHRcXHQgICAgaW50IG5ld19tdHUpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzEzLXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMTQ6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMTUtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjAtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzIxOnN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF9tYXhfbXR1KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTMyNS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozMjY6c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5bGlua19nZXRfY2FwcyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHNhLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMjctXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zMzMtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzM0OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZHNhX2xvb3BfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNTpcXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gZHNhX2xvb3BfZ2V0X3Byb3RvY29sLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNjpcXHQuc2V0dXBcXHRcXHRcXHQ9IGRzYV9sb29wX3NldHVwLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzNzpcXHQudGVhcmRvd25cXHRcXHQ9IGRzYV9sb29wX3RlYXJkb3duLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzODpcXHQuZ2V0X3N0cmluZ3NcXHRcXHQ9IGRzYV9sb29wX2dldF9zdHJpbmdzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjMzOTpcXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IGRzYV9sb29wX2dldF9ldGh0b29sX3N0YXRzLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MDpcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IGRzYV9sb29wX2dldF9zc2V0X2NvdW50LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0MTpcXHQuZ2V0X2V0aHRvb2xfcGh5X3N0YXRzXFx0PSBkc2FfbG9vcF9nZXRfZXRodG9vbF9zdGF0cyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDI6XFx0LnBoeV9yZWFkXFx0XFx0PSBkc2FfbG9vcF9waHlfcmVhZCxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDM6XFx0LnBoeV93cml0ZVxcdFxcdD0gZHNhX2xvb3BfcGh5X3dyaXRlLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NDpcXHQucG9ydF9icmlkZ2Vfam9pblxcdD0gZHNhX2xvb3BfcG9ydF9icmlkZ2Vfam9pbixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDU6XFx0LnBvcnRfYnJpZGdlX2xlYXZlXFx0PSBkc2FfbG9vcF9wb3J0X2JyaWRnZV9sZWF2ZSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDY6XFx0LnBvcnRfc3RwX3N0YXRlX3NldFxcdD0gZHNhX2xvb3BfcG9ydF9zdHBfc3RhdGVfc2V0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM0NzpcXHQucG9ydF92bGFuX2ZpbHRlcmluZ1xcdD0gZHNhX2xvb3BfcG9ydF92bGFuX2ZpbHRlcmluZyxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNDg6XFx0LnBvcnRfdmxhbl9hZGRcXHRcXHQ9IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzQ5OlxcdC5wb3J0X3ZsYW5fZGVsXFx0XFx0PSBkc2FfbG9vcF9wb3J0X3ZsYW5fZGVsLFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1MDpcXHQucG9ydF9jaGFuZ2VfbXR1XFx0PSBkc2FfbG9vcF9wb3J0X2NoYW5nZV9tdHUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzUxOlxcdC5wb3J0X21heF9tdHVcXHRcXHQ9IGRzYV9sb29wX3BvcnRfbWF4X210dSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTI6XFx0LnBoeWxpbmtfZ2V0X2NhcHNcXHQ9IGRzYV9sb29wX3BoeWxpbmtfZ2V0X2NhcHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzUzLX07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NTpzdGF0aWMgaW50IGRzYV9sb29wX2Rydl9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTc6XFx0c3RydWN0IGRzYV9sb29wX3BkYXRhICpwZGF0YSA9IG1kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1ODpcXHRzdHJ1Y3QgZHNhX2xvb3BfcHJpdiAqcHM7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Mi1cXHRkcy1cXHUwMDNlZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODM6XFx0ZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg0LVxcdGRzLVxcdTAwM2Vwcml2ID0gcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk3OnN0YXRpYyB2b2lkIGRzYV9sb29wX2Rydl9yZW1vdmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5OC17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk5LVxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MDA6XFx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQwMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIyLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMzpzdGF0aWMgc3RydWN0IG1kaW9fZHJpdmVyIGRzYV9sb29wX2RydiA9IHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjQtXFx0Lm1kaW9kcnYuZHJpdmVyXFx0PSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjYtXFx0fSxcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Mjc6XFx0LnByb2JlXFx0PSBkc2FfbG9vcF9kcnZfcHJvYmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI4OlxcdC5yZW1vdmVcXHQ9IGRzYV9sb29wX2Rydl9yZW1vdmUsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI5OlxcdC5zaHV0ZG93biA9IGRzYV9sb29wX2Rydl9zaHV0ZG93bixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzAtfTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzEtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDMyOnN0YXRpYyBpbnQgZHNhX2xvb3BfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldixcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzMtXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQzNTpcXHRyZXR1cm4gZHJ2ID09IFxcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM2LX1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzctXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM4OnN0YXRpYyB2b2lkIGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3Rlcih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzOS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ2OnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ4OlxcdHN0YXRpYyBzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEgZHNhX2xvb3BfcGRhdGEgPSB7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDQ5LVxcdFxcdC5jZCA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzE6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzI6XFx0c3dpdGNoX21kaW9kZXYtXFx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXFx1MDAyNmRzYV9sb29wX3BkYXRhO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3My1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODI6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4My17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDg3OlxcdHJldCA9IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2RldigpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NDpcXHRyZXQgPSBtZGlvX2RyaXZlcl9yZWdpc3RlcihcXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTUtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ5NjpcXHRcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTctXFx0XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwMi19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTAzOm1vZHVsZV9pbml0KGRzYV9sb29wX2luaXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwNC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDU6c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcXHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZkc2FfbG9vcF9kcnYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwODpcXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDktXFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMS19XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTEyOm1vZHVsZV9leGl0KGRzYV9sb29wX2V4aXQpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUxMy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjE6NDEuMzI0NDQ1Mjc2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIxOTcyMzA0NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBEU0EgVGFnIFByb3RvY29sIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyBEU0EgdGFnIHByb3RvY29scyBhcmUgaGFuZGxlZCwgc3BlY2lmaWNhbGx5IHRoaW5raW5nIGFib3V0IHRoZSBgZHNhX2xvb3BgIGRyaXZlci4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBkc2FfbG9vcGAgdXNlcyBgZHNhX2xvb3BfZ2V0X3Byb3RvY29sYCwgd2hpY2ggc2VlbXMgdG8gYWx3YXlzIHJldHVybiBgRFNBX1RBR19QUk9UT19OT05FYC4gVGhhdCdzIGEgYml0IGxpbWl0aW5nLCBpc24ndCBpdD9cblxuTXkgbmV4dCB0aG91Z2h0IGlzLCBjYW4gd2Ugc29tZWhvdyBvdmVycmlkZSB0aGlzPyBDYW4gd2UgbWFuaXB1bGF0ZSB0aGUgdGFnIHByb3RvY29sIHZpYSBkZXZsaW5rIG9yIHN5c2ZzPyBCdXQgd2FpdCwgbG9va2luZyBjbG9zZXIgYXQgdGhlIGNvZGUgZm9yIGBkc2FfbG9vcF9nZXRfcHJvdG9jb2xgLCBpdCdzIGhhcmRjb2RlZCB0byByZXR1cm4gYERTQV9UQUdfUFJPVE9fTk9ORWAuIFRoYXQncyBhIGRlYWQgZW5kIHRoZXJlLlxuXG5TbywgaWYgYGRzYV9sb29wYCBpc24ndCBnb2luZyB0byBiZSBoZWxwZnVsIGRpcmVjdGx5LCB3aGF0ICpvdGhlciogYXZlbnVlcyBhcmUgdGhlcmUgZm9yIHRlc3RpbmcgRFNBIHRhZ2dlcnM/IEkgcmVtZW1iZXIgYGRzYV9sb29wX2JkaW5mby5jYCByZWdpc3RlcnMgdGhvc2UgZml4ZWQgUEhZcy4gQW55dGhpbmcgdGhlcmU/ICBNb3JlIGdlbmVyYWxseSwgaXMgdGhlcmUgKmFueSogb3RoZXIgZHJpdmVyIGluIHRoZSBEU0EgZWNvc3lzdGVtIHRoYXQgZ2l2ZXMgeW91IHRoZSBhYmlsaXR5IHRvICpzZXQqIHRoZSBEU0EgdGFnIHByb3RvY29sLCBvciBkeW5hbWljYWxseSBjaGFuZ2UgaXQ/XG5cbk9rYXksIGJhY2sgdG8gYGRzYV9sb29wYC4gQ2FuIEkgY29uZmlndXJlIGl0IHRvIGJlIHNvbWV0aGluZyAqb3RoZXIqIHRoYW4gYERTQV9UQUdfUFJPVE9fTk9ORWA/IEl0IGtlZXBzIGNvbWluZyBiYWNrIHRvIHRoZSBmYWN0IHRoYXQgaXQgcmV0dXJucyBgRFNBX1RBR19QUk9UT19OT05FYC4gIFNvLCBob3cgY2FuIEkgZXZlbiBleHBsb3JlIHRoZSBgRFNBX1RBR19QUk9UT19ZVDkyMlhgIHRhZ2dlcj8gQWgsIHRoZSBgeXQ5MjJ4X25ldGRldl9vcHNgIGFyZSByZWdpc3RlcmVkIHZpYSBgRFNBX1RBR19EUklWRVJgLiBTbywgY2FuIEkgZHluYW1pY2FsbHkgKmNoYW5nZSogdGhlIHRhZyBwcm90b2NvbCBvZiBhIERTQSBzd2l0Y2g/IEknbSB0aGlua2luZyBhYm91dCBzeXNmcyBvciBOZXRsaW5rLiBTdXJlbHkgdGhlcmUgaXMgc29tZSBtZXRob2QgbGlrZSBgZHNhX3N3aXRjaF9zZXRfdGFnX3Byb3RvY29sYCBzb21ld2hlcmUuIFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLCBpc24ndCBpdD8gTGV0IG1lIGxvb2sgZm9yIGEgd2F5IHRvIGNoYW5nZSBpdCBkeW5hbWljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkzMTgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjE6NTMuNTIxNjc5MzcxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwNjA5NjMxMzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZHNhX3RhZ19wcm90b2NvbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3Q9NjA2PVN3aXRjaCBjb25maWd1cmF0aW9uXFxuLS1cXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3QtNjA5LS0gYGBnZXRfdGFnX3Byb3RvY29sYGA6IHRoaXMgaXMgdG8gaW5kaWNhdGUgd2hhdCBraW5kIG9mIHRhZ2dpbmcgcHJvdG9jb2wgaXNcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZHNhL2RzYS5yc3Q6NjEwOiAgc3VwcG9ydGVkLCBzaG91bGQgYmUgYSB2YWxpZCB2YWx1ZSBmcm9tIHRoZSBgYGRzYV90YWdfcHJvdG9jb2xgYCBlbnVtLlxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kc2EvZHNhLnJzdC02MTEtICBUaGUgcmV0dXJuZWQgaW5mb3JtYXRpb24gZG9lcyBub3QgaGF2ZSB0byBiZSBzdGF0aWM7IHRoZSBkcml2ZXIgaXMgcGFzc2VkIHRoZVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM9MjQ3OD1zdGF0aWMgYm9vbCBiNTNfY2FuX2VuYWJsZV9icmNtX3RhZ3Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzoyNDc5OlxcdFxcdFxcdFxcdCAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIHRhZ19wcm90b2NvbClcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0yNDgwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX2NvbW1vbi5jLTI1MDMtXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfY29tbW9uLmM6MjUwNDplbnVtIGRzYV90YWdfcHJvdG9jb2wgYjUzX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYzoyNTA1OlxcdFxcdFxcdFxcdFxcdCAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcHJvdClcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19jb21tb24uYy0yNTA2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaD0xMzM9c3RydWN0IGI1M19kZXZpY2Uge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oLTE1NC1cXHR1MTYgbnVtX2FybF9idWNrZXRzO1xcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDoxNTU6XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHRhZ19wcm90b2NvbDtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtMTU2LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2I1My9iNTNfcHJpdi5oPTU0Nz1pbnQgYjUzX21pcnJvcl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaC01NDktXFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2Lmg6NTUwOmVudW0gZHNhX3RhZ19wcm90b2NvbCBiNTNfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9iNTMvYjUzX3ByaXYuaDo1NTE6XFx0XFx0XFx0XFx0XFx0ICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wcm90KTtcXG5kcml2ZXJzL25ldC9kc2EvYjUzL2I1M19wcml2LmgtNTUyLXZvaWQgYjUzX21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTk3PXN0YXRpYyBpbnQgZHNhX2xvb3Bfc2V0dXBfZGV2bGlua19yZXNvdXJjZXMoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI0LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGRzYV9sb29wX2dldF9wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI2LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjEyNzpcXHRcXHRcXHRcXHRcXHRcXHQgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTI4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9oaXJzY2htYW5uL2hlbGxjcmVlay5jPTIyNz1zdGF0aWMgdm9pZCBoZWxsY3JlZWtfZmVhdHVyZV9kZXRlY3Qoc3RydWN0IGhlbGxjcmVlayAqaGVsbGNyZWVrKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmMtMjM5LVxcbmRyaXZlcnMvbmV0L2RzYS9oaXJzY2htYW5uL2hlbGxjcmVlay5jOjI0MDpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGhlbGxjcmVla19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvaGlyc2NobWFubi9oZWxsY3JlZWsuYy0yNDEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2hpcnNjaG1hbm4vaGVsbGNyZWVrLmM6MjQyOlxcdFxcdFxcdFxcdFxcdFxcdFxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcXG5kcml2ZXJzL25ldC9kc2EvaGlyc2NobWFubi9oZWxsY3JlZWsuYy0yNDMte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2tzODk5NS5jPTUzMD1zdGF0aWMgZW51bVxcbmRyaXZlcnMvbmV0L2RzYS9rczg5OTUuYzo1MzE6ZHNhX3RhZ19wcm90b2NvbCBrczg5OTVfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL2tzODk5NS5jLTUzMi1cXHRcXHRcXHRcXHRcXHQgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL2tzODk5NS5jOjUzMzpcXHRcXHRcXHRcXHRcXHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9rczg5OTUuYy01MzQte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jPTg2Nz1zdGF0aWMgaW50IGxhbjkzMDNfY2hlY2tfZGV2aWNlKHN0cnVjdCBsYW45MzAzICpjaGlwKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbjkzMDMtY29yZS5jLTkzNi1cXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmM6OTM3OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbGFuOTMwM19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbGFuOTMwMy1jb3JlLmMtOTM4LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYzo5Mzk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9sYW45MzAzLWNvcmUuYy05NDAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXAuaD0yNTU9c3RydWN0IGdzd2lwX2h3X2luZm8ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXAuaC0yNjItXFx0c2l6ZV90IHBjZV9taWNyb2NvZGVfc2l6ZTtcXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcC5oOjI2MzpcXHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgdGFnX3Byb3RvY29sO1xcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwLmgtMjY0LVxcdHZvaWQgKCpwaHlsaW5rX2dldF9jYXBzKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2xhbnRpcS9sYW50aXFfZ3N3aXBfY29tbW9uLmM9NzQyPXN0YXRpYyB2b2lkIGdzd2lwX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jLTc0OC1cXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYzo3NDk6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBnc3dpcF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbGFudGlxL2xhbnRpcV9nc3dpcF9jb21tb24uYy03NTAtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jOjc1MTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9sYW50aXEvbGFudGlxX2dzd2lwX2NvbW1vbi5jLTc1Mi17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYz0yOTcwPXN0YXRpYyBpbnQga3N6OF9zd2l0Y2hfaW5pdChzdHJ1Y3Qga3N6X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk3OC1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzoyOTc5OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wga3N6ODQ2M19nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0yOTgwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5ODE6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5ODIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9Mjk4Nj1zdGF0aWMgaW50IGtzejg0NjNfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjI5ODc6XFx0XFx0XFx0XFx0XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTI5ODgte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMjk5OS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMDAwOnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wga3N6ODd4eF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMDAxLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMDI6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMwMDMte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzAwNz1zdGF0aWMgaW50IGtzejg3eHhfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMDg6XFx0XFx0XFx0XFx0XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMwMDkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmMtMzAxNS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYzozMDE2OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wga3N6ODh4eF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejguYy0zMDE3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMTg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMwMTkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o4LmM9MzAyOD1zdGF0aWMgaW50IGtzejg4eHhfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jOjMwMjk6XFx0XFx0XFx0XFx0XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OC5jLTMwMzAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM9MTk3MD1zdGF0aWMgaW50IGtzejk0Nzdfc3dpdGNoX2luaXQoc3RydWN0IGtzel9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jLTE5ODktXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmM6MTk5MDpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGtzejk0NzdfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9rc3o5NDc3LmMtMTk5MS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzoxOTkyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0xOTkzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAva3N6OTQ3Ny5jPTIwMDQ9c3RhdGljIGludCBrc3o5NDc3X2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYzoyMDA1OlxcdFxcdFxcdFxcdFxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2tzejk0NzcuYy0yMDA2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM9NzY4PXN0YXRpYyBpbnQgbGFuOTM3eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jLTkwNy1cXG5kcml2ZXJzL25ldC9kc2EvbWljcm9jaGlwL2xhbjkzN3hfbWFpbi5jOjkwODpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGxhbjkzN3hfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYy05MDktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYzo5MTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtOTExLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmM9OTE1PXN0YXRpYyBpbnQgbGFuOTM3eF9jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL21pY3JvY2hpcC9sYW45Mzd4X21haW4uYzo5MTY6XFx0XFx0XFx0XFx0XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxcbmRyaXZlcnMvbmV0L2RzYS9taWNyb2NoaXAvbGFuOTM3eF9tYWluLmMtOTE3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYz0yMTQ2PXN0YXRpYyB2b2lkIG10NzUzeF9wb3J0X21pcnJvcl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTY4LVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyMTY5OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcXG5kcml2ZXJzL25ldC9kc2EvbXQ3NTMwLmMtMjE3MC1tdGtfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYzoyMTcxOlxcdFxcdCAgICAgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9tdDc1MzAuYy0yMTcyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTYwNjAuYz0yNz1zdGF0aWMgY29uc3QgY2hhciAqbXY4OGU2MDYwX2dldF9uYW1lKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBzd19hZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNjA2MC5jLTQ0LVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTYwNjAuYzo0NTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIG12ODhlNjA2MF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2MDYwLmMtNDYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0aW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNjA2MC5jOjQ3OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBtKVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTYwNjAuYy00OC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz02NjI3PXN0YXRpYyBzdHJ1Y3QgbXY4OGU2eHh4X2NoaXAgKm12ODhlNnh4eF9hbGxvY19jaGlwKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jLTY2NDUtXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6NjY0NjpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIG12ODhlNnh4eF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjQ3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjY2NDg6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIG0pXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNjY0OS17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz02NjU1PXN0YXRpYyBpbnQgbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjY2NTY6XFx0XFx0XFx0XFx0XFx0IGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjU3LXtcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjU4LVxcdHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcCA9IGRzLVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5jOjY2NTk6XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIG9sZF9wcm90b2NvbDtcXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYy02NjYwLVxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmg9MzQ5PXN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuaC0zNTItXFx0LyogQ3VycmVudGx5IGNvbmZpZ3VyZWQgdGFnZ2luZyBwcm90b2NvbCAqL1xcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5oOjM1MzpcXHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgdGFnX3Byb3RvY29sO1xcbmRyaXZlcnMvbmV0L2RzYS9tdjg4ZTZ4eHgvY2hpcC5oLTM1NC1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTE1OT1zdGF0aWMgY29uc3Qgc3RydWN0IG14bDg2Mnh4X2V2bGFuX3J1bGVfZGVzYyB2aWRfYWNjZXB0X2VncmVzc191bmF3YXJlW10gPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0xNjMtXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6MTY0OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXhsODYyeHhfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMTY1LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzoxNjY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtKVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTE2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYz01Mj1zdGF0aWMgdm9pZCBuZXRjX2Rlc3Ryb3lfdmxhbl9saXN0KHN0cnVjdCBuZXRjX3N3aXRjaCAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jLTYwLVxcbmRyaXZlcnMvbmV0L2RzYS9uZXRjL25ldGNfbWFpbi5jOjYxOnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2xcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYy02Mi1uZXRjX2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvbmV0Yy9uZXRjX21haW4uYzo2MzpcXHRcXHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXByb3QpXFxuZHJpdmVycy9uZXQvZHNhL25ldGMvbmV0Y19tYWluLmMtNjQte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTc1ND1zdGF0aWMgaW50IGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzo3NTU6XFx0XFx0XFx0XFx0ICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTc1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtODAwLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYzo4MDE6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBmZWxpeF9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtODAyLVxcdFxcdFxcdFxcdFxcdFxcdCAgICBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6ODAzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTgwNC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9MTY3OD1zdGF0aWMgaW50IGZlbGl4X2Nvbm5lY3RfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6MTY3OTpcXHRcXHRcXHRcXHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTE2ODAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jPTIzOTA9aW50IGZlbGl4X3JlZ2lzdGVyX3N3aXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHJlc291cmNlX3NpemVfdCBzd2l0Y2hfYmFzZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYy0yMzkyLVxcdFxcdFxcdCAgYm9vbCBtbV9zdXBwb3J0ZWQsXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjIzOTM6XFx0XFx0XFx0ICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgaW5pdF90YWdfcHJvdG8sXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzOTQtXFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3QgZmVsaXhfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguaD04Nz1zdHJ1Y3QgZmVsaXgge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5oLTkzLVxcdHJlc291cmNlX3NpemVfdFxcdFxcdFxcdHN3aXRjaF9iYXNlO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguaDo5NDpcXHRlbnVtIGRzYV90YWdfcHJvdG9jb2xcXHRcXHR0YWdfcHJvdG87XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5oLTk1LVxcdGNvbnN0IHN0cnVjdCBmZWxpeF90YWdfcHJvdG9fb3BzICp0YWdfcHJvdG9fb3BzO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5oPTEwMT1pbnQgZmVsaXhfcmVnaXN0ZXJfc3dpdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgcmVzb3VyY2Vfc2l6ZV90IHN3aXRjaF9iYXNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5oLTEwMy1cXHRcXHRcXHQgIGJvb2wgbW1fc3VwcG9ydGVkLFxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguaDoxMDQ6XFx0XFx0XFx0ICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgaW5pdF90YWdfcHJvdG8sXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5oLTEwNS1cXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBmZWxpeF9pbmZvICppbmZvKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM9NDg1PXN0YXRpYyB2b2lkIGFyOTMzMV9zd19wb3J0X2Rpc2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtNDk1LVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM6NDk2OnN0YXRpYyBlbnVtIGRzYV90YWdfcHJvdG9jb2wgYXI5MzMxX3N3X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtNDk3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmM6NDk4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBtKVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvYXI5MzMxLmMtNDk5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTE3Mzk9c3RhdGljIHUzMiBxY2E4a19nZXRfcGh5X2ZsYWdzKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjE3NTU6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jLTE3NTYtcWNhOGtfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jOjE3NTc6XFx0XFx0ICAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcXG5kcml2ZXJzL25ldC9kc2EvcWNhL3FjYThrLTh4eHguYy0xNzU4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9xY2EvcWNhOGstOHh4eC5jPTE3ODI9c3RhdGljIGludCBxY2E4a19jb25uZWN0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmM6MTc4MzpcXHRcXHRcXHRcXHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuZHJpdmVycy9uZXQvZHNhL3FjYS9xY2E4ay04eHh4LmMtMTc4NC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jPTEwNDQ9cnRsODM2NW1iX2dldF9wb3J0X2V4dGludChzdHJ1Y3QgcmVhbHRla19wcml2ICpwcml2LCBpbnQgcG9ydClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMTA2Mi1cXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jOjEwNjM6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbFxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmMtMTA2NC1ydGw4MzY1bWJfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmM6MTA2NTpcXHRcXHRcXHQgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0xMDY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjVtYl9tYWluLmM9MjkyMD1zdGF0aWMgaW50IHJ0bDgzNjVtYl9jaGFuZ2VfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jOjI5MjE6XFx0XFx0XFx0XFx0XFx0IGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jLTI5MjIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NnJiLmM9ODY2PXN0YXRpYyBpbnQgcnRsODM2NnJiX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yZWFsdGVrL3J0bDgzNjZyYi5jLTExMjktXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NnJiLmM6MTEzMDpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIHJ0bDgzNjZfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NnJiLmMtMTEzMS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYzoxMTMyOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcXG5kcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY2cmIuYy0xMTMzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM9ODE9c3RhdGljIHZvaWQgYTVwc3dfcmVnX3JtdyhzdHJ1Y3QgYTVwc3cgKmE1cHN3LCBpbnQgb2Zmc2V0LCB1MzIgbWFzaywgdTMyIHZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtOTQtXFxuZHJpdmVycy9uZXQvZHNhL3J6bjFfYTVwc3cuYzo5NTpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGE1cHN3X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmMtOTYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS9yem4xX2E1cHN3LmM6OTc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcXG5kcml2ZXJzL25ldC9kc2EvcnpuMV9hNXBzdy5jLTk4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaD0xMTU9c3RydWN0IHNqYTExMDVfaW5mbyB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1LmgtMTM2LVxcdGJvb2wgZml4ZWRfY2JzX21hcHBpbmc7XFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNS5oOjEzNzpcXHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgdGFnX3Byb3RvO1xcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDUuaC0xMzgtXFx0Y29uc3Qgc3RydWN0IHNqYTExMDVfZHluYW1pY190YWJsZV9vcHMgKmR5bl9vcHM7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYz0yMjU4PWludCBzamExMTA1X3N0YXRpY19jb25maWdfcmVsb2FkKHN0cnVjdCBzamExMTA1X3ByaXZhdGUgKnByaXYsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evc2phMTEwNS9zamExMTA1X21haW4uYy0yMzU0LVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjIzNTU6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbFxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTIzNTYtc2phMTEwNV9nZXRfdGFnX3Byb3RvY29sKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM6MjM1NzpcXHRcXHRcXHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIG1wKVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTIzNTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3NqYTExMDUvc2phMTEwNV9tYWluLmM9MjY5MT1zdGF0aWMgaW50IHNqYTExMDVfY29ubmVjdF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jOjI2OTI6XFx0XFx0XFx0XFx0XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxcbmRyaXZlcnMvbmV0L2RzYS9zamExMTA1L3NqYTExMDVfbWFpbi5jLTI2OTMte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3ZpdGVzc2UtdnNjNzN4eC1jb3JlLmM9NjYyPXN0YXRpYyBpbnQgdnNjNzN4eF9waHlfd3JpdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcGh5LCBpbnQgcmVnbnVtLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3ZpdGVzc2UtdnNjNzN4eC1jb3JlLmMtNjg1LVxcbmRyaXZlcnMvbmV0L2RzYS92aXRlc3NlLXZzYzczeHgtY29yZS5jOjY4NjpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIHZzYzczeHhfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL3ZpdGVzc2UtdnNjNzN4eC1jb3JlLmMtNjg3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS92aXRlc3NlLXZzYzczeHgtY29yZS5jOjY4ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXApXFxuZHJpdmVycy9uZXQvZHNhL3ZpdGVzc2UtdnNjNzN4eC1jb3JlLmMtNjg5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS94cnM3MDB4L3hyczcwMHguYz0xODU9c3RhdGljIGludCB4cnM3MDB4X3NldHVwX3JlZ21hcF9yYW5nZShzdHJ1Y3QgeHJzNzAweCAqcHJpdilcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS94cnM3MDB4L3hyczcwMHguYy0yMjUtXFxuZHJpdmVycy9uZXQvZHNhL3hyczcwMHgveHJzNzAweC5jOjIyNjpzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIHhyczcwMHhfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL3hyczcwMHgveHJzNzAweC5jLTIyNy1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICBpbnQgcG9ydCxcXG5kcml2ZXJzL25ldC9kc2EveHJzNzAweC94cnM3MDB4LmM6MjI4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtKVxcbmRyaXZlcnMvbmV0L2RzYS94cnM3MDB4L3hyczcwMHguYy0yMjkte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jPTQyODA9c3RhdGljIGludCB5dDkyMXhfcG9ydF9zZXR1cChzdHJ1Y3QgeXQ5MjF4X3ByaXYgKnByaXYsIGludCBwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTQzMjAtXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjQzMjE6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbFxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy00MzIyLXl0OTIxeF9kc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYzo0MzIzOlxcdFxcdFxcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNDMyNC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmM9NTM4MT1zdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyB5dDkyMnhfcGh5bGlua19tYWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jLTUzODYtXFxuZHJpdmVycy9uZXQvZHNhL3l0OTIxeC5jOjUzODc6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbFxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYy01Mzg4LXl0OTIyeF9kc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbmRyaXZlcnMvbmV0L2RzYS95dDkyMXguYzo1Mzg5OlxcdFxcdFxcdCAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbSlcXG5kcml2ZXJzL25ldC9kc2EveXQ5MjF4LmMtNTM5MC17XFxuLS1cXG5pbmNsdWRlL25ldC9kc2EuaD0yNj1zdHJ1Y3QgdGNfYWN0aW9uO1xcbi0tXFxuaW5jbHVkZS9uZXQvZHNhLmgtNjQtXFxuaW5jbHVkZS9uZXQvZHNhLmg6NjU6ZW51bSBkc2FfdGFnX3Byb3RvY29sIHtcXG5pbmNsdWRlL25ldC9kc2EuaC02Ni1cXHREU0FfVEFHX1BST1RPX05PTkVcXHRcXHQ9IERTQV9UQUdfUFJPVE9fTk9ORV9WQUxVRSxcXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oPTEwNj1zdHJ1Y3QgZHNhX2RldmljZV9vcHMge1xcbi0tXFxuaW5jbHVkZS9uZXQvZHNhLmgtMTE1LVxcdGNvbnN0IGNoYXIgKm5hbWU7XFxuaW5jbHVkZS9uZXQvZHNhLmg6MTE2OlxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bztcXG5pbmNsdWRlL25ldC9kc2EuaC0xMTctXFx0LyogU29tZSB0YWdnaW5nIHByb3RvY29scyBlaXRoZXIgbWFuZ2xlIG9yIHNoaWZ0IHRoZSBkZXN0aW5hdGlvbiBNQUNcXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oPTEzMz1zdHJ1Y3QgZHNhX3N3aXRjaF90cmVlIHtcXG4tLVxcbmluY2x1ZGUvbmV0L2RzYS5oLTE1OC1cXHQgKi9cXG5pbmNsdWRlL25ldC9kc2EuaDoxNTk6XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIGRlZmF1bHRfcHJvdG87XFxuaW5jbHVkZS9uZXQvZHNhLmgtMTYwLVxcbi0tXFxuaW5jbHVkZS9uZXQvZHNhLmg9ODY0PXN0cnVjdCBkc2Ffc3dpdGNoX29wcyB7XFxuLS1cXG5pbmNsdWRlL25ldC9kc2EuaC04NzEtXFx0ICovXFxuaW5jbHVkZS9uZXQvZHNhLmg6ODcyOlxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCAoKmdldF90YWdfcHJvdG9jb2wpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5pbmNsdWRlL25ldC9kc2EuaC04NzMtXFx0XFx0XFx0XFx0XFx0XFx0ICBpbnQgcG9ydCxcXG5pbmNsdWRlL25ldC9kc2EuaDo4NzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgbXByb3QpO1xcbmluY2x1ZGUvbmV0L2RzYS5oLTg3NS1cXHRpbnRcXHQoKmNoYW5nZV90YWdfcHJvdG9jb2wpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5pbmNsdWRlL25ldC9kc2EuaDo4NzY6XFx0XFx0XFx0XFx0ICAgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90byk7XFxuaW5jbHVkZS9uZXQvZHNhLmgtODc3LVxcdC8qXFxuLS1cXG5pbmNsdWRlL25ldC9kc2EuaC04ODItXFx0aW50XFx0KCpjb25uZWN0X3RhZ19wcm90b2NvbCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmluY2x1ZGUvbmV0L2RzYS5oOjg4MzpcXHRcXHRcXHRcXHRcXHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pO1xcbmluY2x1ZGUvbmV0L2RzYS5oLTg4NC1cXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jPTM0MD1zdGF0aWMgc3NpemVfdCB0YWdnaW5nX3Nob3coc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5uZXQvZHNhL2NvbmR1aXQuYy0zNDYtXFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiJXNcXFxcblxcXCIsXFxubmV0L2RzYS9jb25kdWl0LmM6MzQ3OlxcdFxcdCAgICAgICBkc2FfdGFnX3Byb3RvY29sX3RvX3N0cihjcHVfZHAtXFx1MDAzZXRhZ19vcHMpKTtcXG5uZXQvZHNhL2NvbmR1aXQuYy0zNDgtfVxcbi0tXFxubmV0L2RzYS9jb25kdWl0LmM9NDE5PWludCBkc2FfY29uZHVpdF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZHNhX3BvcnQgKmNwdV9kcClcXG4tLVxcbm5ldC9kc2EvY29uZHVpdC5jLTQyNS1cXG5uZXQvZHNhL2NvbmR1aXQuYzo0MjY6XFx0bXR1ID0gRVRIX0RBVEFfTEVOICsgZHNhX3RhZ19wcm90b2NvbF9vdmVyaGVhZCh0YWdfb3BzKTtcXG5uZXQvZHNhL2NvbmR1aXQuYy00MjctXFxuLS1cXG5uZXQvZHNhL2RzYS5jPTExMjI9c3RhdGljIGludCBkc2FfcG9ydF9wYXJzZV9kc2Eoc3RydWN0IGRzYV9wb3J0ICpkcClcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTEyOC1cXG5uZXQvZHNhL2RzYS5jOjExMjk6c3RhdGljIGVudW0gZHNhX3RhZ19wcm90b2NvbCBkc2FfZ2V0X3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3BvcnQgKmRwLFxcbm5ldC9kc2EvZHNhLmMtMTEzMC1cXHRcXHRcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlICpjb25kdWl0KVxcbm5ldC9kc2EvZHNhLmMtMTEzMS17XFxubmV0L2RzYS9kc2EuYzoxMTMyOlxcdGVudW0gZHNhX3RhZ19wcm90b2NvbCB0YWdfcHJvdG9jb2wgPSBEU0FfVEFHX1BST1RPX05PTkU7XFxubmV0L2RzYS9kc2EuYy0xMTMzLVxcdHN0cnVjdCBkc2Ffc3dpdGNoICptZHMsICpkcyA9IGRwLVxcdTAwM2VkcztcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTE1NT1zdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX2NwdShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTE2MC1cXHRzdHJ1Y3QgZHNhX3N3aXRjaF90cmVlICpkc3QgPSBkcy1cXHUwMDNlZHN0O1xcbm5ldC9kc2EvZHNhLmM6MTE2MTpcXHRlbnVtIGRzYV90YWdfcHJvdG9jb2wgZGVmYXVsdF9wcm90bztcXG5uZXQvZHNhL2RzYS5jLTExNjItXFxuLS1cXG5uZXQvZHNhL3RhZy5jPTE2OD1FWFBPUlRfU1lNQk9MX0dQTChkc2FfdGFnX2RyaXZlcnNfdW5yZWdpc3Rlcik7XFxubmV0L2RzYS90YWcuYy0xNjktXFxubmV0L2RzYS90YWcuYzoxNzA6Y29uc3QgY2hhciAqZHNhX3RhZ19wcm90b2NvbF90b19zdHIoY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzICpvcHMpXFxubmV0L2RzYS90YWcuYy0xNzEte1xcbi0tXFxubmV0L2RzYS90YWcuaD0yND12b2lkIGRzYV90YWdfZHJpdmVyX3B1dChjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgKm9wcyk7XFxubmV0L2RzYS90YWcuaDoyNTpjb25zdCBjaGFyICpkc2FfdGFnX3Byb3RvY29sX3RvX3N0cihjb25zdCBzdHJ1Y3QgZHNhX2RldmljZV9vcHMgKm9wcyk7XFxubmV0L2RzYS90YWcuaC0yNi1cXG5uZXQvZHNhL3RhZy5oOjI3OnN0YXRpYyBpbmxpbmUgaW50IGRzYV90YWdfcHJvdG9jb2xfb3ZlcmhlYWQoY29uc3Qgc3RydWN0IGRzYV9kZXZpY2Vfb3BzICpvcHMpXFxubmV0L2RzYS90YWcuaC0yOC17XFxuLS1cXG5uZXQvZHNhL3VzZXIuYz0yMTAyPWludCBkc2FfdXNlcl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbi0tXFxubmV0L2RzYS91c2VyLmMtMjE0MS1cXG5uZXQvZHNhL3VzZXIuYzoyMTQyOlxcdG92ZXJoZWFkID0gZHNhX3RhZ19wcm90b2NvbF9vdmVyaGVhZChjcHVfZHAtXFx1MDAzZXRhZ19vcHMpO1xcbm5ldC9kc2EvdXNlci5jLTIxNDMtXFx0bXR1X2xpbWl0ID0gbWluX3QoaW50LCBjb25kdWl0LVxcdTAwM2VtYXhfbXR1LCBkZXYtXFx1MDAzZW1heF9tdHUgKyBvdmVyaGVhZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjIxOjU1LjU4MjY1MTc4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1MTk5MjQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBDb25kdWl0IFRhZ2dpbmcgRnVuY3Rpb25zKipcblxuQWxyaWdodCwgc28gSSdtIHBva2luZyBhcm91bmQgaW4gYG5ldC9kc2EvY29uZHVpdC5jYCBhbmQgc2VlIHRoZXNlIGZ1bmN0aW9ucywgYHRhZ2dpbmdfc2hvd2AgYW5kIGB0YWdnaW5nX3N0b3JlYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIkhtbSwgc291bmRzIGxpa2UgdGhpcyBtaWdodCBiZSB3aGVyZSB0aGUgY29uZHVpdCB0YWdnaW5nIGNvbmZpZ3VyYXRpb24gbGl2ZXMuXCIgQnV0IEkgY2FuJ3QganVzdCBhc3N1bWUgYW55dGhpbmcsIHNvIEkgc2hvdWxkIHNlZSBpZiBgdGFnZ2luZ19zdG9yZWAgYWN0dWFsbHkgZXhpc3RzIGFzIGEgZnVuY3Rpb24uIEknbSBnb2luZyB0byBxdWlja2x5IGNvbmZpcm0gdGhhdCBpdCdzIGRlZmluZWQgYmVmb3JlIEkgdHJ5IHRvIGludGVycHJldCB0aGUgY29udGV4dCwgb3IgYmVmb3JlIEkgZ28gcG9raW5nIGFyb3VuZCBpbiB0aGUgZnVuY3Rpb24ncyBjb2RlLiBHb3R0YSBiZSBtZXRob2RpY2FsIGFib3V0IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5NzcwLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjE6NTkuNzM0NjQ3ODI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4OTE1MTkyMjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFnZ2luZ19zdG9yZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZHNhL2NvbmR1aXQuYz0zNDA9c3RhdGljIHNzaXplX3QgdGFnZ2luZ19zaG93KHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubmV0L2RzYS9jb25kdWl0LmMtMzQ5LVxcbm5ldC9kc2EvY29uZHVpdC5jOjM1MDpzdGF0aWMgc3NpemVfdCB0YWdnaW5nX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcbm5ldC9kc2EvY29uZHVpdC5jLTM1MS1cXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMjoyMjowMS42MjYxNzQ1MzlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjIzMzEyOTY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbnJlYWNoYWJsZSBUYWcgUHJvdG9jb2w6IEEgRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgZHluYW1pY2FsbHkgY2hhbmdpbmcgdGhlIHRhZyBwcm90b2NvbCBvZiBhIERTQSBzd2l0Y2gsIHNwZWNpZmljYWxseSB0aGUgYERTQV9UQUdfUFJPVE9fWVQ5MjJYYCBwcm90b2NvbCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSB2dWxuZXJhYmlsaXR5IHNwYWNlLiBJIHNlZSB0aGF0IHRoZSBgdGFnZ2luZ19zdG9yZWAgc3lzZnMgZW50cnkgaW4gYG5ldC9kc2EvY29uZHVpdC5jYCBhbGxvd3MgZHluYW1pYyBjaGFuZ2VzLCB3aGljaCBpcyBncmVhdCwgYnV0IGl0J3Mgbm90IHRoZSBmdWxsIHN0b3J5LiBUaGlzIGVudHJ5IGNhbGxzIGBkc2Ffc3dpdGNoX2NoYW5nZV90YWdfcHJvdG9jb2xgLCB3aGljaCwgaW4gdHVybiwgY2FsbHMgYGRzLVx1MDAzZW9wcy1cdTAwM2VjaGFuZ2VfdGFnX3Byb3RvY29sYC4gVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLiBJZiB0aGUgc3dpdGNoIGRyaXZlciBkb2Vzbid0IGltcGxlbWVudCBgY2hhbmdlX3RhZ19wcm90b2NvbGAsIHRoZSBhdHRlbXB0IHRvIGNoYW5nZSB0aGUgdGFnIHByb3RvY29sIHdpbGwgZmFpbC5cblxuVGhlIGltbWVkaWF0ZSBwcm9ibGVtIGlzIHRoYXQgYGRzYV9sb29wYCwgd2hpY2ggaXMgYSBjb21tb25seSB1c2VkIG1vY2sgZHJpdmVyLCAqZG9lc24ndCogaW1wbGVtZW50IGBjaGFuZ2VfdGFnX3Byb3RvY29sYC4gU28sIHN0cmFpZ2h0Zm9yd2FyZCBtb2RpZmljYXRpb24gb2YgaXRzIHByb3RvY29sIGlzIG91dC4gTW9kaWZ5aW5nIHRoZSBgZHNhX2xvb3BgIGRyaXZlciBpdHNlbGYgaXMgYSBub24tc3RhcnRlci4gSSBuZWVkIHRvIGZpbmQgYW5vdGhlciBEU0Egc3dpdGNoIGRyaXZlciB0aGF0IEkgKmNhbiogYWN0dWFsbHkgaW5zdGFudGlhdGUgd2l0aGluIG15IHRlc3RpbmcgZW52aXJvbm1lbnQuXG5cbkknbSB3b3JraW5nIGluIGEgc3RhbmRhcmQgeDg2XzY0IFFFTVUgZW52aXJvbm1lbnQsIG5vdCBzb21lIHNwZWNpYWxpemVkIGBzYW5kYm94YCBhcmNoaXRlY3R1cmUsIHdoaWNoIGxpbWl0cyBteSBvcHRpb25zLiBJJ20gaGl0dGluZyBhIHJvYWRibG9jay4gQ2FuIEkgc29tZWhvdyBpbnN0YW50aWF0ZSBhIERTQSBzd2l0Y2ggdGhhdCAqdXNlcyogYERTQV9UQUdfUFJPVE9fWVQ5MjJYYD8gVGhlIGRyaXZlciBhc3NvY2lhdGVkIHdpdGggdGhhdCBpcyBgeXQ5MjF4LmNgLCBhIGRyaXZlciBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUvWVQ5MjI0IHN3aXRjaCBjaGlwcy4gQ3J1Y2lhbGx5LCBpdCdzIGFuIE1ESU8gZGV2aWNlIGRyaXZlci5cblxuQ2FuIEkgaW5zdGFudGlhdGUgYW4gTURJTyBkZXZpY2UgdmlhIHN5c2ZzPyBJIGtub3cgSTJDIGFuZCBTUEkgaGF2ZSBzb21lIG1lY2hhbmlzbXMsIGJ1dCBNRElPIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGEgZ2VuZXJpYyBgbmV3X2RldmljZWAgYXR0cmlidXRlLiBJcyB0aGVyZSBhIGJhY2tkb29yPyBJIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgaW5qZWN0aW5nIE1ESU8gZGV2aWNlcyB1c2luZyBzb21ldGhpbmcgbGlrZSBgbWRpby1tb2NrYCBvciBgbWRpby1ncGlvYCwgYnV0IHN5emthbGxlciBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhIGRpcmVjdCBtZWFucyB0byBjcmVhdGUgYXJiaXRyYXJ5IE1ESU8gZGV2aWNlcywgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBmdXp6ZXIgc2V0dXAuXG5cblRoZSBgZHNhX2xvb3BgIGRyaXZlciBpcyBpbnN0YW50aWF0ZWQgdGhyb3VnaCBgZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2YCwgd2hpY2ggcmVnaXN0ZXJzIGEgKmZpeGVkKiBNRElPIGRldmljZS4gTm8gbHVjayB0aGVyZS4gV2hhdCBhYm91dCBsb2FkaW5nIHRoZSBgeXQ5Mnh4X21kaW9fZHJpdmVyYCBkaXJlY3RseT9cblxuTG9va2luZyBhdCB0aGUgZHJpdmVyJ3MgZGV2aWNlIG1hdGNoIHRhYmxlOlxuYGBgY1xuc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeXQ5Mnh4X29mX21hdGNoW10gPSB7XG5cdHtcblx0XHQuY29tcGF0aWJsZSA9IFwibW90b3Jjb21tLHl0OTIxNVwiLFxuXHRcdC5kYXRhID0gXHUwMDI2eXQ5Mnh4X2NoaXBfaW5mb190YWJsZVtZVDkyMTVdLFxuXHR9LFxuXHR7XG5cdFx0LmNvbXBhdGlibGUgPSBcIm1vdG9yY29tbSx5dDkyMjRcIixcblx0XHQuZGF0YSA9IFx1MDAyNnl0OTJ4eF9jaGlwX2luZm9fdGFibGVbWVQ5MjI0XSxcblx0fSxcblx0e31cbn07XG5gYGBcblRoaXMgaXMgYSBkZXZpY2UtdHJlZSBkcml2ZW4gZHJpdmVyLiBXaXRob3V0IERldmljZSBUcmVlLCBgb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRldilgIHdpbGwgcmV0dXJuIE5VTEwsIGFuZCB0aGUgcHJvYmUgd2lsbCBmYWlsIHdpdGggYC1FSU5WQUxgLiBUaGUgZHJpdmVyIHVzZXMgdGhlIGZvbGxvd2luZyBjb2RlOlxuYGBgY1xuXHRjb21wYXRfaW5mbyA9IG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpO1xuXHRpZiAoIWNvbXBhdF9pbmZvKVxuXHRcdHJldHVybiAtRUlOVkFMO1xuYGBgXG5FdmVuIGlmIEkgKmNvdWxkKiBzb21laG93IGJpbmQgdGhpcyBkcml2ZXIgdG8gYW4gTURJTyBkZXZpY2UgKHRocm91Z2gsIHNheSwgYSBgYmluZGAgc3lzZnMgb3BlcmF0aW9uKSwgaXQgd291bGQgZmFpbCBiZWNhdXNlIHRoZSBuZWNlc3NhcnkgYG9mX25vZGVgIHdpdGggdGhlIG1hdGNoaW5nIGNvbXBhdGlibGUgc3RyaW5nIChcIm1vdG9yY29tbSx5dDkyMTVcIiBvciBcIm1vdG9yY29tbSx5dDkyMjRcIikgd291bGQgYmUgYWJzZW50IGluIG15IHN0YW5kYXJkIFFFTVUgc2V0dXAuIFRoZSBwcm9iZSAqd2lsbCogYWx3YXlzIGZhaWwgaW4gYSBub24tRGV2aWNlIFRyZWUgZW52aXJvbm1lbnQuXG5cbldoYXQgaWYgSSdtIHJ1bm5pbmcgc3l6a2FsbGVyIG9uIGFuIEFSTTY0IFFFTVUgd2l0aCBhIGRldmljZSB0cmVlPyBTeXprYWxsZXIgKmRvZXMqIHJ1biBvbiBBUk02NCwgYnV0IGl0IGRvZXNuJ3QgZHluYW1pY2FsbHkgZ2VuZXJhdGUgRFQgbm9kZXMgZm9yIGFyYml0cmFyeSBkcml2ZXJzLiBJdCB1c2VzIGEgZml4ZWQgRGV2aWNlIFRyZWUgcHJvdmlkZWQgd2l0aCB0aGUgc3l6a2FsbGVyIGltYWdlLiBTbywgdW5sZXNzIHRoZSBEZXZpY2UgVHJlZSBzcGVjaWZpY2FsbHkgaW5jbHVkZXMgZWl0aGVyIFwibW90b3Jjb21tLHl0OTIxNVwiIG9yIFwibW90b3Jjb21tLHl0OTIyNFwiIGVudHJpZXMsIHRoZSBkcml2ZXIgd2lsbCBub3QgcHJvYmUsIHdoaWNoIGlzIGFsbW9zdCBjZXJ0YWlubHkgbm90IHRoZSBjYXNlIGZvciBnZW5lcmljIGltYWdlcy4gVW5mb3J0dW5hdGVseSwgc3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIGBzeXpfZGV2bGlua2AgcHNldWRvLXN5c2NhbGwgdGhhdCBjb3VsZCBjcmVhdGUgYW4gTURJTyBkZXZpY2UgZWl0aGVyLiBEZXZsaW5rIGlzIGZvciBkZXZsaW5rIGRldmljZXMgb25seS5cblxuSSBoYXZlIHRvIGNvbnNpZGVyIGlmIHRoZSB0YWcgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYHRhZ195dDkyMXguY2AsIGlzIHJlYWNoYWJsZSBpbiBhbnkgb3RoZXIgd2F5LiBJdCdzIHJlZ2lzdGVyZWQgdmlhIGBtb2R1bGVfZHNhX3RhZ19kcml2ZXJzKGRzYV90YWdfZHJpdmVyX2FycmF5KWAgYW5kIHJlZ2lzdGVycyBgXG5cbiIsIklucHV0VG9rZW5zIjo0MDEwOCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjI6MjcuODU5MzA5MTc0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDIzNzAwNzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuY2hhbmdlX3RhZ19wcm90b2NvbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuYz03MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXY4OGU2eHh4X3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNzE4OC1cXHQuZ2V0X3RhZ19wcm90b2NvbFxcdD0gbXY4OGU2eHh4X2dldF90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmM6NzE4OTpcXHQuY2hhbmdlX3RhZ19wcm90b2NvbFxcdD0gbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL212ODhlNnh4eC9jaGlwLmMtNzE5MC1cXHQuc2V0dXBcXHRcXHRcXHQ9IG12ODhlNnh4eF9zZXR1cCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz0yMzA2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgZmVsaXhfc3dpdGNoX29wcyA9IHtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwNy1cXHQuZ2V0X3RhZ19wcm90b2NvbFxcdFxcdD0gZmVsaXhfZ2V0X3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6MjMwODpcXHQuY2hhbmdlX3RhZ19wcm90b2NvbFxcdFxcdD0gZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbCxcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmMtMjMwOS1cXHQuY29ubmVjdF90YWdfcHJvdG9jb2xcXHRcXHQ9IGZlbGl4X2Nvbm5lY3RfdGFnX3Byb3RvY29sLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYz0zMjg1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgcnRsODM2NW1iX3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0zMjg2LVxcdC5nZXRfdGFnX3Byb3RvY29sID0gcnRsODM2NW1iX2dldF90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYzozMjg3OlxcdC5jaGFuZ2VfdGFnX3Byb3RvY29sID0gcnRsODM2NW1iX2NoYW5nZV90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL3JlYWx0ZWsvcnRsODM2NW1iX21haW4uYy0zMjg4LVxcdC5zZXR1cCA9IHJ0bDgzNjVtYl9zZXR1cCxcXG4tLVxcbm5ldC9kc2EvZHNhLmM9MTE1NT1zdGF0aWMgaW50IGRzYV9wb3J0X3BhcnNlX2NwdShzdHJ1Y3QgZHNhX3BvcnQgKmRwLCBzdHJ1Y3QgbmV0X2RldmljZSAqY29uZHVpdCxcXG4tLVxcbm5ldC9kc2EvZHNhLmMtMTIzMC1cXHQgKiBkc2Ffc3dpdGNoX3NldHVwX3RhZ19wcm90b2NvbCBvbmNlIC5zZXR1cCBoYXMgcnVuIGFuZCB0aGVcXG5uZXQvZHNhL2RzYS5jOjEyMzE6XFx0ICogZHJpdmVyIGlzIHJlYWR5IHRvIGFjY2VwdCBjYWxscyB0byAuY2hhbmdlX3RhZ19wcm90b2NvbC4gSWZcXG5uZXQvZHNhL2RzYS5jLTEyMzItXFx0ICogdGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjdXN0b20gcHJvdG9jb2wgYXQgdGhhdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMjoyMjozMC4yODMwMjE5NzJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTUyNDkxMjg4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBjaGFuZ2VfdGFnX3Byb3RvY29sYCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZSBkcml2ZXJzIHRoYXQgYWN0dWFsbHkgaGFuZGxlIHRoZSBgY2hhbmdlX3RhZ19wcm90b2NvbGAgZnVuY3Rpb24uIEl0IGxvb2tzIGxpa2Ugd2UndmUgZ290IGBtdjg4ZTZ4eHhgLCBgZmVsaXhgLCBhbmQgYHJ0bDgzNjVtYmAgbGlzdGVkLiBNeSBmaXJzdCBxdWVzdGlvbiBpcywgY2FuIGFueSBvZiB0aGVzZSBiZSBlZmZlY3RpdmVseSB0ZXN0ZWQgb3IgZXhwZXJpbWVudGVkIHdpdGggaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50PyBJdCB3b3VsZCBtYWtlIGRlYnVnZ2luZyBhbmQgZGV2ZWxvcG1lbnQgYSBsb3QgZWFzaWVyLlxuXG5Ob3csIEkgcmVjYWxsIGBtdjg4ZTZ4eHhgIGlzIGFuIE1ESU8gZHJpdmVyLiBUaGF0IGZlZWxzIG1hbmFnZWFibGUgaW4gYSB2aXJ0dWFsIHNldHVwLCBwb3RlbnRpYWxseSB0aHJvdWdoIGVtdWxhdGlvbiBvZiBhbiBNRElPIGJ1cy4gSG93ZXZlciwgYGZlbGl4YOKApiB0aGF0J3MgYW4gaW50ZXJlc3RpbmcgY2FzZS4gSSB2YWd1ZWx5IHJlbWVtYmVyIGl0IGJlaW5nIGEgUENJIGRyaXZlciwgc3BlY2lmaWNhbGx5IGZvciB0aGUgTlhQIFZTQzk5NTkuIEJ1dCBob2xkIG9uLCBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdC4gSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQgKmlzKiBhIFBDSSBkcml2ZXIgdG8gdW5kZXJzdGFuZCB0aGUgdmlydHVhbCBlbnZpcm9ubWVudCBpbXBsaWNhdGlvbnMuIExldCBtZSB0YWtlIGEgcXVpY2sgcGVlayBhdCBgZmVsaXhfdnNjOTk1OS5jYCBhbmQgY29uZmlybSBteSBhc3N1bXB0aW9ucy4gVGhhdCB3aWxsIGJlIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgYmVzdCB0byBkZXZlbG9wIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMDA3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjIyOjM1LjgwNzkzOTY2NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA3MzY0MDI5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZWxpeF92c2M5OTU5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvTWFrZWZpbGU9Nz1tc2NjX2ZlbGl4X2RzYV9saWItb2JqcyA6PSBmZWxpeC5vXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9NYWtlZmlsZTo4Om1zY2NfZmVsaXgtb2JqcyA6PSBmZWxpeF92c2M5OTU5Lm9cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L01ha2VmaWxlLTktbXNjY19vY2Vsb3RfZXh0LW9ianMgOj0gb2NlbG90X2V4dC5vXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYz0yNzQ1PU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBmZWxpeF9pZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTI3NDYtXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmM6Mjc0NzpzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZmVsaXhfdnNjOTk1OV9wY2lfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTI3NDgtXFx0Lm5hbWVcXHRcXHQ9IFxcXCJtc2NjX2ZlbGl4XFxcIixcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXhfdnNjOTk1OS5jLTI3NTMtfTtcXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4X3ZzYzk5NTkuYzoyNzU0Om1vZHVsZV9wY2lfZHJpdmVyKGZlbGl4X3ZzYzk5NTlfcGNpX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeF92c2M5OTU5LmMtMjc1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjI6MzcuODgxNTg2ODc1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MTcyNTk4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uc2lkZXJpbmcgRHJpdmVyIENvbXBhdGliaWxpdHkgYW5kIFBvdGVudGlhbCBQcm90b2NvbCBNYW5pcHVsYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgZmVsaXhfdnNjOTk1OWAuIFJpZ2h0LCBpdCAqaXMqIGEgUENJIGRyaXZlciwgYnV0IHRoZSBwcm9ibGVtIGlzIGl0J3MgdGllZCBzcGVjaWZpY2FsbHkgdG8gdGhlIE5YUCBWU0M5OTU5IGRldmljZSwgYW5kIHRoYXQncyBub3Qgc29tZXRoaW5nIHlvdSdsbCBmaW5kIGVtdWxhdGVkIGluIGEgdHlwaWNhbCBRRU1VIHNldHVwLiBUaGF0J3MgYSBkZWZpbml0ZSByb2FkYmxvY2suIEhtbeKApiB3aGF0IGFib3V0IGBydGw4MzY1bWJgPyBJdOKAmXMgYW4gTURJTyBkcml2ZXIsIHBvdGVudGlhbGx5IG9mZmVyaW5nIGEgZGlmZmVyZW50IGF2ZW51ZS5cblxuTm93LCBob2xkIG9uLiBBIHRob3VnaHQgaXMgZW1lcmdpbmcuIENhbiB3ZSBtYW5pcHVsYXRlIHRoZSB0YWdnaW5nIHByb3RvY29sIG9uIGEgc3dpdGNoPyBQZXJoYXBzLCBzb21laG93LCB3ZSBjb3VsZCBjaGFuZ2UgaXQgdG8gYW4gYXJiaXRyYXJ5IG9uZT8gVGhhdCBjb3VsZCBvcGVuIHNvbWUgaW50ZXJlc3RpbmcgZG9vcnMuIExldCdzIHNlZS4uLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGBmZWxpeF9jaGFuZ2VfdGFnX3Byb3RvY29sYCB0byB1bmRlcnN0YW5kIHRoaXMgZGlyZWN0aW9uIGZ1cnRoZXIuIFRoYXQgbWlnaHQgcHJvdmlkZSB0aGUgYW5zd2VyIEknbSBsb29raW5nIGZvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM3NzUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMjoyMjo0Mi43OTg4NTA1MjdaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5OTI1NTAyNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9NzMyPWZlbGl4X3RhZ19wcm90b19zZXR1cF9zaGFyZWQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTc1My0gKi9cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM6NzU0OnN0YXRpYyBpbnQgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTc1NS1cXHRcXHRcXHRcXHQgICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9vY2Vsb3QvZmVsaXguYz0xNjk2PXN0YXRpYyBpbnQgZmVsaXhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTE3NTEtXFx0ICovXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjE3NTI6XFx0ZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbChkcywgZmVsaXgtXFx1MDAzZXRhZ19wcm90byk7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTE3NTMtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2Evb2NlbG90L2ZlbGl4LmM9MjMwNj1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGZlbGl4X3N3aXRjaF9vcHMgPSB7XFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzMDctXFx0LmdldF90YWdfcHJvdG9jb2xcXHRcXHQ9IGZlbGl4X2dldF90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jOjIzMDg6XFx0LmNoYW5nZV90YWdfcHJvdG9jb2xcXHRcXHQ9IGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2wsXFxuZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jLTIzMDktXFx0LmNvbm5lY3RfdGFnX3Byb3RvY29sXFx0XFx0PSBmZWxpeF9jb25uZWN0X3RhZ19wcm90b2NvbCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjI6NDQuNzkxNDA4NTA4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMDE0MjM0MzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2xgIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbGAuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hhdCdzIGl0cyBpbnRlbmRlZCBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBGZWxpeCBlY29zeXN0ZW0/IElzIGl0IGEgY29yZSBmdW5jdGlvbiwgYSB1dGlsaXR5LCBvciBzb21ldGhpbmcgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIHVzZSBjYXNlIG9yIGNvbXBvbmVudD8gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNjb3BlIGFuZCBjb250ZXh0LlxuXG5HaXZlbiB0aGUgbmFtZSwgXCJjaGFuZ2VfdGFnX3Byb3RvY29sXCIsIEknbSBiZXR0aW5nIHRoaXMgaXMgcmVsYXRlZCB0byBob3cgRmVsaXggaGFuZGxlcyB0YWdnaW5nLiBQZXJoYXBzIGl0J3MgaW52b2x2ZWQgaW4gbW9kaWZ5aW5nIHRoZSBwcm90b2NvbCB1c2VkIGZvciBjb21tdW5pY2F0aW9uIG9mIHRhZ3MgYmV0d2VlbiBlbmRwb2ludHMsIG9yIG1heWJlIGl0J3MgcmVsYXRlZCB0byBob3cgdGFncyB0aGVtc2VsdmVzIGFyZSBlbmNvZGVkIG9yIGludGVycHJldGVkLiBUaGUgdGVybSBcInByb3RvY29sXCIgbWFrZXMgbWUgdGhpbmsgb2YgdW5kZXJseWluZyBuZXR3b3JrIGNvbW11bmljYXRpb25zIG9yIHNlcmlhbGl6YXRpb24gZm9ybWF0cy4gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGlzIGFib3V0IHN3aXRjaGluZyBiZXR3ZWVuIElQIHNldHMsIElQIHRhYmxlcywgZUJQRiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkgZm9yIHRhZyBlbmZvcmNlbWVudC5cblxuSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUsIGFueSBkb2N1bWVudGF0aW9uLCBhbmQgaG9wZWZ1bGx5LCByZWxldmFudCBjYWxscyB0byB0aGlzIGZ1bmN0aW9uIGluIHRoZSBjb2RlYmFzZS4gVW5kZXJzdGFuZGluZyB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzLCBhcyB3ZWxsIGFzIGFueSBzaWRlIGVmZmVjdHMsIHdpbGwgYmUgY3J1Y2lhbC4gSSdtIGludGVyZXN0ZWQgaW4gdGhlIGVycm9yIGhhbmRsaW5nIOKAkyBob3cgZG9lcyBpdCBkZWFsIHdpdGggaW52YWxpZCBvciBjb25mbGljdGluZyBpbnB1dHM/IEFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBJIG5lZWQgdG8gd29ycnkgYWJvdXQ/IERvZXMgdGhpcyBmdW5jdGlvbiBoYXZlIGFueSBpbXBhY3Qgb24gZGF0YSBjb25zaXN0ZW5jeSBhY3Jvc3MgdGhlIGRpc3RyaWJ1dGVkIHN5c3RlbT9cblxuVWx0aW1hdGVseSwgbXkgZ29hbCBpcyB0byBncmFzcCB0aGUgY29yZSBsb2dpYyBvZiBgZmVsaXhfY2hhbmdlX3RhZ19wcm90b2NvbGAgYW5kIGl0cyBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIHN0YWJpbGl0eSBvZiB0aGUgRmVsaXggZGVwbG95bWVudC4gSSBleHBlY3QgYSBjYXJlZnVsIGluc3BlY3Rpb24gd2lsbCBiZSBuZWVkZWQgdG8gdHJ1bHkgdW5kZXJzdGFuZCBob3cgaXQgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDUyOCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjIyOjU0LjgwNTY0NjA3OFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzkwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL29jZWxvdC9mZWxpeC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc1NCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDc1NDpcXHRzdGF0aWMgaW50IGZlbGl4X2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbiA3NTU6XFx0XFx0XFx0XFx0XFx0ICAgICBlbnVtIGRzYV90YWdfcHJvdG9jb2wgcHJvdG8pXFxuIDc1NjpcXHR7XFxuIDc1NzpcXHRcXHRjb25zdCBzdHJ1Y3QgZmVsaXhfdGFnX3Byb3RvX29wcyAqb2xkX3Byb3RvX29wcywgKnByb3RvX29wcztcXG4gNzU4OlxcdFxcdHN0cnVjdCBvY2Vsb3QgKm9jZWxvdCA9IGRzLVxcdTAwM2Vwcml2O1xcbiA3NTk6XFx0XFx0c3RydWN0IGZlbGl4ICpmZWxpeCA9IG9jZWxvdF90b19mZWxpeChvY2Vsb3QpO1xcbiA3NjA6XFx0XFx0aW50IGVycjtcXG4gNzYxOlxcdFxcbiA3NjI6XFx0XFx0c3dpdGNoIChwcm90bykge1xcbiA3NjM6XFx0XFx0Y2FzZSBEU0FfVEFHX1BST1RPX1NFVklMTEU6XFxuIDc2NDpcXHRcXHRjYXNlIERTQV9UQUdfUFJPVE9fT0NFTE9UOlxcbiA3NjU6XFx0XFx0XFx0cHJvdG9fb3BzID0gXFx1MDAyNmZlbGl4X3RhZ19ucGlfcHJvdG9fb3BzO1xcbiA3NjY6XFx0XFx0XFx0YnJlYWs7XFxuIDc2NzpcXHRcXHRjYXNlIERTQV9UQUdfUFJPVE9fT0NFTE9UXzgwMjFROlxcbiA3Njg6XFx0XFx0XFx0cHJvdG9fb3BzID0gXFx1MDAyNmZlbGl4X3RhZ184MDIxcV9wcm90b19vcHM7XFxuIDc2OTpcXHRcXHRcXHRicmVhaztcXG4gNzcwOlxcdFxcdGRlZmF1bHQ6XFxuIDc3MTpcXHRcXHRcXHRyZXR1cm4gLUVQUk9UT05PU1VQUE9SVDtcXG4gNzcyOlxcdFxcdH1cXG4gNzczOlxcdFxcbiA3NzQ6XFx0XFx0b2xkX3Byb3RvX29wcyA9IGZlbGl4LVxcdTAwM2V0YWdfcHJvdG9fb3BzO1xcbiA3NzU6XFx0XFxuIDc3NjpcXHRcXHRpZiAocHJvdG9fb3BzID09IG9sZF9wcm90b19vcHMpXFxuIDc3NzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzc4OlxcdFxcbiA3Nzk6XFx0XFx0ZXJyID0gcHJvdG9fb3BzLVxcdTAwM2VzZXR1cChkcyk7XFxuIDc4MDpcXHRcXHRpZiAoZXJyKVxcbiA3ODE6XFx0XFx0XFx0Z290byBzZXR1cF9mYWlsZWQ7XFxuIDc4MjpcXHRcXG4gNzgzOlxcdFxcdGVyciA9IGZlbGl4X3RhZ19wcm90b19zZXR1cF9zaGFyZWQoZHMsIHByb3RvX29wcywgb2xkX3Byb3RvX29wcyk7XFxuIDc4NDpcXHRcXHRpZiAoZXJyKVxcbiA3ODU6XFx0XFx0XFx0Z290byBzZXR1cF9zaGFyZWRfZmFpbGVkO1xcbiA3ODY6XFx0XFxuIDc4NzpcXHRcXHRpZiAob2xkX3Byb3RvX29wcylcXG4gNzg4OlxcdFxcdFxcdG9sZF9wcm90b19vcHMtXFx1MDAzZXRlYXJkb3duKGRzKTtcXG4gNzg5OlxcdFxcbiA3OTA6XFx0XFx0ZmVsaXgtXFx1MDAzZXRhZ19wcm90b19vcHMgPSBwcm90b19vcHM7XFxuIDc5MTpcXHRcXHRmZWxpeC1cXHUwMDNldGFnX3Byb3RvID0gcHJvdG87XFxuIDc5MjpcXHRcXG4gNzkzOlxcdFxcdHJldHVybiAwO1xcbiA3OTQ6XFx0XFxuIDc5NTpcXHRzZXR1cF9zaGFyZWRfZmFpbGVkOlxcbiA3OTY6XFx0XFx0cHJvdG9fb3BzLVxcdTAwM2V0ZWFyZG93bihkcyk7XFxuIDc5NzpcXHRzZXR1cF9mYWlsZWQ6XFxuIDc5ODpcXHRcXHRyZXR1cm4gZXJyO1xcbiA3OTk6XFx0fVxcbiA4MDA6XFx0XFxuIDgwMTpcXHRzdGF0aWMgZW51bSBkc2FfdGFnX3Byb3RvY29sIGZlbGl4X2dldF90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbiA4MDI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGludCBwb3J0LFxcbiA4MDM6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgIGVudW0gZHNhX3RhZ19wcm90b2NvbCBtcClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjI6NTQuODA1OTI3ODk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMzY3OTY0ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZTpcblxuKipNeSBJbW1lZGlhdGUgQXNzZXNzbWVudCoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYW5kIGl0J3MgY2xlYXIgdGhlIHN5c3RlbSdzIGN1cnJlbnQgc3VwcG9ydCBpcyBwcmV0dHkgbGltaXRlZC4gSXQgc2VlbXMgdG8gb25seSByZWNvZ25pemUgdGhlc2UgRFNBIHByb3RvY29sczogYERTQV9UQUdfUFJPVE9fU0VWSUxMRWAsIGBEU0FfVEFHX1BST1RPX09DRUxPVGAsIGFuZCBgRFNBX1RBR19QUk9UT19PQ0VMT1RfODAyMVFgLiBUaGF0J3MgYSBkZWNlbnQgc3RhcnQsIGJ1dCBpbW1lZGlhdGVseSBteSBtaW5kIGp1bXBzIHRvIHRoZSBiaWdnZXIgcGljdHVyZSBhbmQgdGhlIHNwZWNpZmljIGhhcmR3YXJlIEkga25vdyB3ZSBuZWVkIHRvIGFkZHJlc3MuIFdoYXQgYWJvdXQgc3VwcG9ydCBmb3IgdGhlIGBtdjg4ZTZ4eHhgIGZhbWlseT8gSXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCBpbiBtYW55IG9mIG91ciBhcHBsaWNhdGlvbnMuIEFyZSB3ZSBuZWdsZWN0aW5nIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUgaGVyZSwgb3IgaXMgdGhpcyBqdXN0IHRoZSBzdGFydGluZyBwb2ludD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhpcyBpcyBhbiBvdmVyc2lnaHQsIGEgZGVsaWJlcmF0ZSBjaG9pY2UsIG9yIGlmIHN1cHBvcnQgaXMgcGxhbm5lZCBmb3IgdGhpcyBicm9hZGVyIHJhbmdlIG9mIE1hcnZlbGwgc3dpdGNoZXMuIFRoaXMgZGV0YWlsIGlzIGNydWNpYWwgZm9yIGFzc2Vzc2luZyB0aGUgc3lzdGVtJ3MgcHJhY3RpY2FsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTY3NSwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjQ6MTcuMTczODk1ODU0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NTI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbXY4OGU2eHh4L2NoaXAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NjU1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2NjU1OlxcdHN0YXRpYyBpbnQgbXY4OGU2eHh4X2NoYW5nZV90YWdfcHJvdG9jb2woc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbjY2NTY6XFx0XFx0XFx0XFx0XFx0XFx0IGVudW0gZHNhX3RhZ19wcm90b2NvbCBwcm90bylcXG42NjU3OlxcdHtcXG42NjU4OlxcdFxcdHN0cnVjdCBtdjg4ZTZ4eHhfY2hpcCAqY2hpcCA9IGRzLVxcdTAwM2Vwcml2O1xcbjY2NTk6XFx0XFx0ZW51bSBkc2FfdGFnX3Byb3RvY29sIG9sZF9wcm90b2NvbDtcXG42NjYwOlxcdFxcdHN0cnVjdCBkc2FfcG9ydCAqY3B1X2RwO1xcbjY2NjE6XFx0XFx0aW50IGVycjtcXG42NjYyOlxcdFxcbjY2NjM6XFx0XFx0c3dpdGNoIChwcm90bykge1xcbjY2NjQ6XFx0XFx0Y2FzZSBEU0FfVEFHX1BST1RPX0VEU0E6XFxuNjY2NTpcXHRcXHRcXHRzd2l0Y2ggKGNoaXAtXFx1MDAzZWluZm8tXFx1MDAzZWVkc2Ffc3VwcG9ydCkge1xcbjY2NjY6XFx0XFx0XFx0Y2FzZSBNVjg4RTZYWFhfRURTQV9VTlNVUFBPUlRFRDpcXG42NjY3OlxcdFxcdFxcdFxcdHJldHVybiAtRVBST1RPTk9TVVBQT1JUO1xcbjY2Njg6XFx0XFx0XFx0Y2FzZSBNVjg4RTZYWFhfRURTQV9VTkRPQ1VNRU5URUQ6XFxuNjY2OTpcXHRcXHRcXHRcXHRkZXZfd2FybihjaGlwLVxcdTAwM2VkZXYsIFxcXCJSZWx5aW5nIG9uIHVuZG9jdW1lbnRlZCBFRFNBIHRhZ2dpbmcgYmVoYXZpb3JcXFxcblxcXCIpO1xcbjY2NzA6XFx0XFx0XFx0XFx0ZmFsbHRocm91Z2g7XFxuNjY3MTpcXHRcXHRcXHRjYXNlIE1WODhFNlhYWF9FRFNBX1NVUFBPUlRFRDpcXG42NjcyOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjY2NzM6XFx0XFx0XFx0fVxcbjY2NzQ6XFx0XFx0XFx0YnJlYWs7XFxuNjY3NTpcXHRcXHRjYXNlIERTQV9UQUdfUFJPVE9fRFNBOlxcbjY2NzY6XFx0XFx0XFx0YnJlYWs7XFxuNjY3NzpcXHRcXHRkZWZhdWx0OlxcbjY2Nzg6XFx0XFx0XFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XFxuNjY3OTpcXHRcXHR9XFxuNjY4MDpcXHRcXG42NjgxOlxcdFxcdG9sZF9wcm90b2NvbCA9IGNoaXAtXFx1MDAzZXRhZ19wcm90b2NvbDtcXG42NjgyOlxcdFxcdGNoaXAtXFx1MDAzZXRhZ19wcm90b2NvbCA9IHByb3RvO1xcbjY2ODM6XFx0XFxuNjY4NDpcXHRcXHRtdjg4ZTZ4eHhfcmVnX2xvY2soY2hpcCk7XFxuNjY4NTpcXHRcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX2NwdV9wb3J0KGNwdV9kcCwgZHMpIHtcXG42Njg2OlxcdFxcdFxcdGVyciA9IG12ODhlNnh4eF9zZXR1cF9wb3J0X21vZGUoY2hpcCwgY3B1X2RwLVxcdTAwM2VpbmRleCk7XFxuNjY4NzpcXHRcXHRcXHRpZiAoZXJyKSB7XFxuNjY4ODpcXHRcXHRcXHRcXHRtdjg4ZTZ4eHhfcmVnX3VubG9jayhjaGlwKTtcXG42Njg5OlxcdFxcdFxcdFxcdGdvdG8gdW53aW5kO1xcbjY2OTA6XFx0XFx0XFx0fVxcbjY2OTE6XFx0XFx0fVxcbjY2OTI6XFx0XFx0bXY4OGU2eHh4X3JlZ191bmxvY2soY2hpcCk7XFxuNjY5MzpcXHRcXG42Njk0OlxcdFxcdHJldHVybiAwO1xcbjY2OTU6XFx0XFxuNjY5NjpcXHR1bndpbmQ6XFxuNjY5NzpcXHRcXHRjaGlwLVxcdTAwM2V0YWdfcHJvdG9jb2wgPSBvbGRfcHJvdG9jb2w7XFxuNjY5ODpcXHRcXG42Njk5OlxcdFxcdG12ODhlNnh4eF9yZWdfbG9jayhjaGlwKTtcXG42NzAwOlxcdFxcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfY3B1X3BvcnRfY29udGludWVfcmV2ZXJzZShjcHVfZHAsIGRzKVxcbjY3MDE6XFx0XFx0XFx0bXY4OGU2eHh4X3NldHVwX3BvcnRfbW9kZShjaGlwLCBjcHVfZHAtXFx1MDAzZWluZGV4KTtcXG42NzAyOlxcdFxcdG12ODhlNnh4eF9yZWdfdW5sb2NrKGNoaXApO1xcbjY3MDM6XFx0XFxuNjcwNDpcXHRcXHRyZXR1cm4gZXJyO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMjoyNDoxNy4xNzQzNjQ2MzRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzcyNjQ5MjYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgUHJvdG9jb2wgU3VwcG9ydCoqXG5cbkFscmlnaHQsIEknbSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgY29kZSwgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgb25seSBzZXQgdXAgdG8gaGFuZGxlIHR3byBzcGVjaWZpYyBEU0EgcHJvdG9jb2wgdGFnczogYERTQV9UQUdfUFJPVE9fRURTQWAgYW5kIGBEU0FfVEFHX1BST1RPX0RTQWAuIFRoYXQncyBhIGJpdCBsaW1pdGluZywgaXNuJ3QgaXQ/IE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCB3aGF0IGFib3V0IG90aGVyIHJlbGV2YW50IGhhcmR3YXJlPyBTcGVjaWZpY2FsbHksIEknbSB3b25kZXJpbmcgYWJvdXQgdGhlIGBydGw4MzY1bWJgIHByb3RvY29sIC0gZG9lcyB0aGlzIGNvZGViYXNlIG5lZWQgdG8gYWNjb21tb2RhdGUgdGhhdCBvbmUgYXQgYWxsPyBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGxpbWl0ZWQgc3VwcG9ydCBpcyBpbnRlbnRpb25hbCwgYSBjb25zY2lvdXMgZGVzaWduIGRlY2lzaW9uLCBvciBpZiBpdCdzIGEgZ2FwIHRoYXQgbmVlZHMgdG8gYmUgYWRkcmVzc2VkLiBQZXJoYXBzIGl0IGlzIG5vdCByZWxldmFudCwgYnV0IEkgbmVlZCB0byBhc2sgbXlzZWxmIHdoZXRoZXIgdGhlIHNjb3BlIG9mIHByb3RvY29scyBpcyBwcm9wZXJseSBkZWZpbmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0Njc1NywiT3V0cHV0VG9rZW5zIjo0OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjQ6MjAuOTAwODYwNzgzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MzI5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvcmVhbHRlay9ydGw4MzY1bWJfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MjAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI5MjA6XFx0c3RhdGljIGludCBydGw4MzY1bWJfY2hhbmdlX3RhZ19wcm90b2NvbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuMjkyMTpcXHRcXHRcXHRcXHRcXHRcXHQgZW51bSBkc2FfdGFnX3Byb3RvY29sIHByb3RvKVxcbjI5MjI6XFx0e1xcbjI5MjM6XFx0XFx0c3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbjI5MjQ6XFx0XFx0c3RydWN0IHJ0bDgzNjVtYl9jcHUgKmNwdTtcXG4yOTI1OlxcdFxcdHN0cnVjdCBydGw4MzY1bWIgKm1iO1xcbjI5MjY6XFx0XFxuMjkyNzpcXHRcXHRtYiA9IHByaXYtXFx1MDAzZWNoaXBfZGF0YTtcXG4yOTI4OlxcdFxcdGNwdSA9IFxcdTAwMjZtYi1cXHUwMDNlY3B1O1xcbjI5Mjk6XFx0XFxuMjkzMDpcXHRcXHRzd2l0Y2ggKHByb3RvKSB7XFxuMjkzMTpcXHRcXHRjYXNlIERTQV9UQUdfUFJPVE9fUlRMOF80OlxcbjI5MzI6XFx0XFx0XFx0Y3B1LVxcdTAwM2Vmb3JtYXQgPSBSVEw4MzY1TUJfQ1BVX0ZPUk1BVF84QllURVM7XFxuMjkzMzpcXHRcXHRcXHRjcHUtXFx1MDAzZXBvc2l0aW9uID0gUlRMODM2NU1CX0NQVV9QT1NfQUZURVJfU0E7XFxuMjkzNDpcXHRcXHRcXHRicmVhaztcXG4yOTM1OlxcdFxcdGNhc2UgRFNBX1RBR19QUk9UT19SVEw4XzRUOlxcbjI5MzY6XFx0XFx0XFx0Y3B1LVxcdTAwM2Vmb3JtYXQgPSBSVEw4MzY1TUJfQ1BVX0ZPUk1BVF84QllURVM7XFxuMjkzNzpcXHRcXHRcXHRjcHUtXFx1MDAzZXBvc2l0aW9uID0gUlRMODM2NU1CX0NQVV9QT1NfQkVGT1JFX0NSQztcXG4yOTM4OlxcdFxcdFxcdGJyZWFrO1xcbjI5Mzk6XFx0XFx0LyogVGhlIHN3aXRjaCBhbHNvIHN1cHBvcnRzIGEgNC1ieXRlIGZvcm1hdCwgc2ltaWxhciB0byBydGw0YSBidXQgd2l0aFxcbjI5NDA6XFx0XFx0ICogdGhlIHNhbWUgMHgwNCA4LWJpdCB2ZXJzaW9uIGFuZCBwcm9iYWJseSA4LWJpdCBwb3J0IHNvdXJjZS9kZXN0LlxcbjI5NDE6XFx0XFx0ICogVGhlcmUgaXMgbm8gcHVibGljIGRvYyBhYm91dCBpdC4gTm90IHN1cHBvcnRlZCB5ZXQgYW5kIGl0IHdpbGwgcHJvYmFibHlcXG4yOTQyOlxcdFxcdCAqIG5ldmVyIGJlLlxcbjI5NDM6XFx0XFx0ICovXFxuMjk0NDpcXHRcXHRkZWZhdWx0OlxcbjI5NDU6XFx0XFx0XFx0cmV0dXJuIC1FUFJPVE9OT1NVUFBPUlQ7XFxuMjk0NjpcXHRcXHR9XFxuMjk0NzpcXHRcXG4yOTQ4OlxcdFxcdHJldHVybiBydGw4MzY1bWJfY3B1X2NvbmZpZyhwcml2KTtcXG4yOTQ5OlxcdH1cXG4yOTUwOlxcdFxcbjI5NTE6XFx0c3RhdGljIGludCBydGw4MzY1bWJfc3dpdGNoX2luaXQoc3RydWN0IHJlYWx0ZWtfcHJpdiAqcHJpdilcXG4yOTUyOlxcdHtcXG4yOTUzOlxcdFxcdHN0cnVjdCBydGw4MzY1bWIgKm1iID0gcHJpdi1cXHUwMDNlY2hpcF9kYXRhO1xcbjI5NTQ6XFx0XFx0Y29uc3Qgc3RydWN0IHJ0bDgzNjVtYl9jaGlwX2luZm8gKmNpO1xcbjI5NTU6XFx0XFx0aW50IHJldDtcXG4yOTU2OlxcdFxcdGludCBpO1xcbjI5NTc6XFx0XFxuMjk1ODpcXHRcXHRjaSA9IG1iLVxcdTAwM2VjaGlwX2luZm87XFxuMjk1OTpcXHRcXG4yOTYwOlxcdFxcdC8qIERvIGFueSBjaGlwLXNwZWNpZmljIGluaXQgamFtIGJlZm9yZSBnZXR0aW5nIHRvIHRoZSBjb21tb24gc3R1ZmYgKi9cXG4yOTYxOlxcdFxcdGlmIChjaS1cXHUwMDNlamFtX3RhYmxlKSB7XFxuMjk2MjpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY2ktXFx1MDAzZWphbV9zaXplOyBpKyspIHtcXG4yOTYzOlxcdFxcdFxcdFxcdHJldCA9IHJlZ21hcF93cml0ZShwcml2LVxcdTAwM2VtYXAsIGNpLVxcdTAwM2VqYW1fdGFibGVbaV0ucmVnLFxcbjI5NjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgY2ktXFx1MDAzZWphbV90YWJsZVtpXS52YWwpO1xcbjI5NjU6XFx0XFx0XFx0XFx0aWYgKHJldClcXG4yOTY2OlxcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjk2NzpcXHRcXHRcXHR9XFxuMjk2ODpcXHRcXHR9XFxuMjk2OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTRUMDI6MjQ6MjAuOTAxMDU2NzMzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1NjgxMTc1MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gYSBWZW5kb3ItU3BlY2lmaWMgTURJTyBTd2l0Y2ggRHJpdmVyKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgYERTQV9UQUdfUFJPVE9fWVQ5MjJYYCBwcm90b2NvbCBpcyBhIGRlYWQgZW5kIGluIHRoZSBjb250ZXh0IG9mIHN0YW5kYXJkIHZpcnR1YWxpemF0aW9uLiBJdCBvbmx5IHN1cHBvcnRzIGBEU0FfVEFHX1BST1RPX1JUTDhfNGAgYW5kIGBEU0FfVEFHX1BST1RPX1JUTDhfNFRgLCBzbyB0aGVyZSdzIG5vIHdheSB0byBkeW5hbWljYWxseSBzd2l0Y2ggZXhpc3RpbmcgRFNBIHN3aXRjaCBkcml2ZXJzIHRvIHRoaXMgbmV3IHByb3RvY29sLlxuXG5JIGNvbnNpZGVyZWQsIGNvdWxkIHdlIHNpbXBseSBsb2FkIHRoZSBgeXQ5MjF4YCBtb2R1bGU/IFRoZSBtb2R1bGUgYHRhZ195dDkyMXgua29gIHJlZ2lzdGVycyB0aGUgdGFnIGRyaXZlciwgYnV0IGl0cyBgeG1pdGAgYW5kIGByY3ZgIGZ1bmN0aW9ucyB3aWxsIG5ldmVyIGJlIGNhbGxlZC4gQmVjYXVzZSBubyBEU0Egc3dpdGNoIHVzZXMgdGhlIG5ldyBwcm90b2NvbC4gRnVydGhlcm1vcmUsIHRoZSBjb3JyZXNwb25kaW5nIGB5dDkyeHhfbWRpb19kcml2ZXJgIHdvbid0IHByb2JlIHNpbmNlIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgRGV2aWNlIFRyZWUgbm9kZS4gVGhpcyB3aG9sZSBibG9jayBvZiBjb2RlLCBJJ3ZlIGNvbmNsdWRlZCwgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgRFQgaW5qZWN0aW9uLCB3aGljaCBhcmVuJ3Qgc3RhbmRhcmQuXG5cbkkgcmFuIHRocm91Z2ggYSBmZXcgc2NlbmFyaW9zIGluIG15IG1pbmQuIENvdWxkIGEgdXNlciBjcmVhdGUgYSBkdW1teSBuZXRkZXZpY2UgYW5kIHNldCBpdHMgYGRzYV9wdHJgPyBObywgdGhlIERTQSBjb3JlIG1hbmFnZXMgdGhpcywgcmVxdWlyaW5nIGEgcmVnaXN0ZXJlZCBEU0Egc3dpdGNoLiBEVCBpbmplY3Rpb24/IFN5emthbGxlciBkb2Vzbid0IGhhdmUgYSBnZW5lcmljIG1lY2hhbmlzbSBmb3IgTURJTyBkZXZpY2VzIG9uIHg4Nl82NDsgYHN5el9kZXZsaW5rYCBpcyBkaWZmZXJlbnQgYW5kIHRoZSBgc3l6X3BsYXRmb3JtX2RldmljZV9hZGRgIGNhbGwgaXMgZm9yIHBsYXRmb3JtIGRldmljZXMsIG5vdCBNRElPLlxuXG5UaGVuIEkgY29uc2lkZXJlZCBpZiB3ZSBjb3VsZCBjYWxsIGB5dDkyeHhfbWRpb19wcm9iZWAgdmlhIGEgcGxhdGZvcm0gZGV2aWNlPyBObywgaXQncyByZWdpc3RlcmVkIGFzIGFuIGBtZGlvX2RyaXZlcmAgd2hpY2ggcmVxdWlyZXMgYW4gTURJTyBidXMgdG8gcHJvYmUuIEV2ZW4gaWYgd2UgY291bGQgY29uanVyZSBhbiBNRElPIGRldmljZSwgaXQgbmVlZHMgYG9mX2RldmljZV9nZXRfbWF0Y2hfZGF0YShkZXYpYCB0byBub3QgYmUgTlVMTCwgd2hpY2ggaXMgdG8gc2F5LCBpdCBNVVNUIGhhdmUgYSBEVCBub2RlLiBTaW5jZSB4ODZfNjQgUUVNVSBkb2Vzbid0IHVzZSBEZXZpY2UgVHJlZSwgaXQgdXNlcyBBQ1BJLCBzbyB0aGF0IGNhbGwgd2lsbCBhbHdheXMgcmV0dXJuIE5VTEwuIFRoZXJlJ3Mgbm8gQUNQSSBtYXRjaCB0YWJsZSwgb25seSBgb2ZfbWF0Y2hfdGFibGVgLiBTbywgb24geDg2XzY0LCB0aGlzIGRyaXZlciB3b24ndCBwcm9iZS5cblxuSSByZW1lbWJlcmVkIHN5emthbGxlciBhbHNvIHJ1bnMgb24gQVJNNjQuIERvZXMgaXQgaW5qZWN0IERUIG5vZGVzIHRoZXJlPyBObywgaXQgdXNlcyBhIHN0YXRpYyBEVEIsIHNvIG5vIGR5bmFtaWMgYWRkaXRpb24uIFRoaXMgZnVydGhlciBzb2xpZGlmaWVzIHRoZSBkcml2ZXIncyB1bnJlYWNoYWJpbGl0eS5cblxuTGV0IG1lIHJldmlldyB0aGUgZ3VpZGVsaW5lcy4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOiAuLi4gLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4gLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIC4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIlxuXG5UaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIE1ESU8gc3dpdGNoIGRyaXZlciBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMTUvWVQ5MjI0LCByZXF1aXJpbmcgZWl0aGVyIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGEgc3BlY2lmaWMgRFQgbm9kZSB0aGF0IGlzbid0IHByZXNlbnQgaW4gc3RhbmRhcmQgZW52aXJvbm1lbnRzLiBJdCdzIHVucmVhY2hhYmxlLlxuXG5MZXQncyBkb3VibGUtY2hlY2sgdGhlIG90aGVyIGNoYW5nZXMuIFRoZXJlIGFyZSBLY29uZmlnIGNoYW5nZXMsIE1ha2VmaWxlIGNoYW5nZXMsIHRoZSBNRElPIGRyaXZlciAoYHl0OTIxeC5jYCksIGEgaGVhZGVyLCBhZGRzIGBEU0FfVEFHX1BST1RPX1lUOTIyWF9WQUxVRWAgaW4gYGRzYS5oYCBhbmQgdGhlIHRhZyBkcml2ZXIgKGB0YWdfeXQ5MjF4LmNgKS4gRXZlcnl0aGluZyBwb2ludHMgdG8gdGhpcyBNb3RvcmNvbW0gc3dpdGNoIGRyaXZlciBhbmQgaXRzIHRhZyBkcml2ZXIuXG5cblNpbmNlIHRoZSBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgYW5kIHRoZSBkcml2ZXIgd29uJ3QgcHJvYmUgd2l0aG91dCBhIHNwZWNpZmljIERUIG5vZGUsIGl0J3MgYWxsIHVucmVhY2hhYmxlLlxuXG5JJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc4MjAsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE0VDAyOjI0OjM2LjU4MjIzNTE4NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0ODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDkyMjQgZXRoZXJuZXQgc3dpdGNoIGNoaXAgdG8gdGhlIHl0OTIxeCBEU0EgZHJpdmVyIGFuZCBhIGNvcnJlc3BvbmRpbmcgRFNBIHRhZyBkcml2ZXIuIFRoZSBkcml2ZXIgaXMgYW4gTURJTyBkcml2ZXIgdGhhdCByZWxpZXMgb24gRGV2aWNlIFRyZWUgKE9GIG1hdGNoIGRhdGEpIHRvIHByb2JlLCB3aGljaCBpcyBub3QgYXZhaWxhYmxlIG9yIGR5bmFtaWNhbGx5IGluamVjdGFibGUgaW4gc3RhbmRhcmQgeDg2XzY0IFFFTVUvR0NFIGVudmlyb25tZW50cy4gRnVydGhlcm1vcmUsIHRoZSBEU0EgdGFnIGRyaXZlciBjYW5ub3QgYmUgcmVhY2hlZCBiZWNhdXNlIG5vIGVtdWxhdGVkIERTQSBzd2l0Y2ggKGxpa2UgZHNhX2xvb3ApIGNhbiBiZSBjb25maWd1cmVkIHRvIHVzZSB0aGUgbmV3bHkgYWRkZWQgRFNBX1RBR19QUk9UT19ZVDkyMlggcHJvdG9jb2wuIFRoZXJlZm9yZSwgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUOTIyNCBldGhlcm5ldCBzd2l0Y2ggY2hpcCB0byB0aGUgeXQ5MjF4IERTQSBkcml2ZXIgYW5kIGEgY29ycmVzcG9uZGluZyBEU0EgdGFnIGRyaXZlci4gVGhlIGRyaXZlciBpcyBhbiBNRElPIGRyaXZlciB0aGF0IHJlbGllcyBvbiBEZXZpY2UgVHJlZSAoT0YgbWF0Y2ggZGF0YSkgdG8gcHJvYmUsIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgb3IgZHluYW1pY2FsbHkgaW5qZWN0YWJsZSBpbiBzdGFuZGFyZCB4ODZfNjQgUUVNVS9HQ0UgZW52aXJvbm1lbnRzLiBGdXJ0aGVybW9yZSwgdGhlIERTQSB0YWcgZHJpdmVyIGNhbm5vdCBiZSByZWFjaGVkIGJlY2F1c2Ugbm8gZW11bGF0ZWQgRFNBIHN3aXRjaCAobGlrZSBkc2FfbG9vcCkgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gdXNlIHRoZSBuZXdseSBhZGRlZCBEU0FfVEFHX1BST1RPX1lUOTIyWCBwcm90b2NvbC4gVGhlcmVmb3JlLCB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xNFQwMjoyNDozNi41ODIyNzQxNzRaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowc4k72[1] Phase: Running StartedAt: 2026-08-14 02:24:47 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc4k72[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-14 02:24:47 +0000 UTC FinishedAt: 2026-08-14 02:24:52 +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,}