Name: series-workflowk8f9l Phase: Failed StartedAt: 2026-09-15 10:14:08 +0000 UTC FinishedAt: 2026-09-15 11:02:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8f9l[0] Phase: Succeeded StartedAt: 2026-09-15 10:14:08 +0000 UTC FinishedAt: 2026-09-15 11:01:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8f9l[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 10:14:08 +0000 UTC FinishedAt: 2026-09-15 11:01:59 +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+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgcXVhZC1wb3J0IDIuNUcgRXRoZXJuZXQgUEhZIGluIGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBhbmQgYWRkcyBhbiBhc3NvY2lhdGVkIGhlbHBlciBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIGluIGRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMuIFRoZSBtb2RpZmllZCBjb2RlIHRhcmdldHMgYSBzcGVjaWZpYyBwaHlzaWNhbCBFdGhlcm5ldCBQSFkgdHJhbnNjZWl2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgc3BlY2lmaWMgRGV2aWNlIFRyZWUgZGVzY3JpcHRpb24gKCYjMzk7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM5OyksIHdoaWNoIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9RRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGUgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaXMgc29sZWx5IGNhbGxlZCBieSB0aGUgWVQ4ODI0IGRyaXZlciwgYW5kIHByb2JlIGltbWVkaWF0ZWx5IGZhaWxzIHdpdGhvdXQgdGhlIE9GIG5vZGUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFlMzFlYTFhNmI1MmM4NjhiOWM3YTc0OTYxMjg2MWYwYzE3MmJlOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMDo1OTo0OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTNlOWY3NjU0MDRhM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcbkBAIC0wLDAgJiM0MzsxLDU5IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogTW90b3JDb21tIFlUODgyNCBFdGhlcm5ldCBQSFlcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gS3lsZSBTd2l0Y2ggXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOlxuJiM0MzsgIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIGlzIGEgUEhZIHBhY2thZ2Ugb2YgNCBQSFlzLlxuJiM0MztcbiYjNDM7JHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCNcbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgY29tcGF0aWJsZTpcbiYjNDM7ICAgIGVudW06XG4mIzQzOyAgICAgIC0gbW90b3Jjb21tLHl0ODgyNC1wYWNrYWdlXG4mIzQzO1xuJiM0MztyZXF1aXJlZDpcbiYjNDM7ICAtIGNvbXBhdGlibGVcbiYjNDM7ICAtIHBoeS1tb2RlXG4mIzQzOyAgLSByZWdcbiYjNDM7XG4mIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgbWRpbyB7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4mIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0ODgyNC1wYWNrYWdlXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2M5XHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgcGh5LW1vZGUgPSBcJiMzNDtpbnRlcm5hbFwmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA0IHtcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzRcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANSB7XG4mIzQzOyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M1XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDYge1xuJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNlx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA3IHtcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzdcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzOyAgICAgICAgfTtcbiYjNDM7ICAgIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuaW5kZXggZDM4MzU1OTdlMzc5NS4uOTk2ZDc1YWZlZDQ0NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuQEAgLTM2MSw5ICYjNDM7MzYxLDEwIEBAIGNvbmZpZyBNSUNST1NFTUlfUEhZXG4gXG4gY29uZmlnIE1PVE9SQ09NTV9QSFlcbiBcdHRyaXN0YXRlIFwmIzM0O01vdG9yY29tbSBQSFlzXCYjMzQ7XG4mIzQzO1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4gXHRoZWxwXG4gXHQgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTW90b3Jjb21tIG5ldHdvcmsgUEhZcy5cbi1cdCAgQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMuXG4mIzQzO1x0ICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcyBhbmQgWVQ4ODI0IDQgKiAyLjVHIFBIWS5cbiBcbiBjb25maWcgTkFUSU9OQUxfUEhZXG4gXHR0cmlzdGF0ZSBcJiMzNDtOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBIWXNcJiMzNDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbmluZGV4IDkwYTRmODZmMjc1OGIuLmI2MDk0OGM5Y2U4ODQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuQEAgLTEsMjQgJiM0MzsxLDMxIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzO1xuIC8qXG4tICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLlxuJiM0MzsgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cbiAgKlxuICAqIEF1dGhvcjogUGV0ZXIgR2VpcyBcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXHUwMDNlXG4gICogQXV0aG9yOiBGcmFuayBcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cdTAwM2VcbiYjNDM7ICogQXV0aG9yOiBLeWxlIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDtwaHlsaWIuaFwmIzM0O1xuJiM0MztcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTFcdFx0MHgwMDAwMDEwYVxuICNkZWZpbmUgUEhZX0lEX1lUODUyMVx0XHQweDAwMDAwMTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIyXHRcdDB4NGY1MWU5MjhcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFcdFx0MHg0ZjUxZTkxYlxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVNcdFx0MHg0ZjUxZTkxYVxuICNkZWZpbmUgUEhZX0lEX1lUODgyMVx0XHQweDRmNTFlYTE5XG4mIzQzOyNkZWZpbmUgUEhZX0lEX1lUODgyNFx0XHQweDRmNTFlOGI4XG4gLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3XG4gICpcdFVUUCBSZWdpc3RlciBzcGFjZVx0fFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMzAsNiAmIzQzOzM3LDE4IEBAXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAqL1xuIFxuJiM0MzsvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcbiYjNDM7ICogVVRQIFJlZ2lzdGVyIHNwYWNlIHwgVVNYR01JSSBSZWdpc3RlciBzcGFjZVxuJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIHwgVVRQIE1JSVx0XHR8IFVTWEdNSUkgTUlJXHRcdHxcbiYjNDM7ICogfCBVVFAgTU1EXHRcdHxcdFx0XHR8XG4mIzQzOyAqIHwgVVRQIEV4dGVuZGVkXHR8IFVTWEdNSUkgRXh0ZW5kZWRcdHxcbiYjNDM7ICogfCBVVFAgVG9wIEV4dGVuZGVkXHR8IFVTWEdNSUkgVG9wIEV4dGVuZGVkXHR8XG4mIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICogfCAgIENvbW1vbiBUb3AgRXh0ZW5kZWRcdFx0XHR8XG4mIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICovXG4mIzQzO1xuIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovXG4gXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuQEAgLTM4MSw2ICYjNDM7NDAwLDEzIEBAXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0FVVE9fQlgyNTAwX1NHTUlJXHQwXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFx0XHQxXG4gXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTS1x0XHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0VcdFx0KDB4MSlcbiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcdFx0XHQoMHgwKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1x0XHRHRU5NQVNLKDMsIDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRVx0XHRcdEJJVCgxMylcbiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HXHRcdCgweDcpXG4mIzQzO1xuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHQvKiBjb21ib19hZHZlcnRpc2luZyBpcyB1c2VkIGZvciBjYXNlIG9mIFlUODUyMSBpbiBjb21ibyBtb2RlLFxuIFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXG5AQCAtMzk5LDYgJiM0Mzs0MjUsMTIgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdHU4IHJlZ19wYWdlO1xuIH07XG4gXG4mIzQzO3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYge1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2VfbW9kZTtcbiYjNDM7XHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUHMgb3BlcmF0aW9uIGlzb2xhdGlvbiBkdXJpbmcgc3dhcCByZWcgc3BhY2UgKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggc2hhcmVkX2xvY2s7XG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJiMzOTtzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC00MzcsNiAmIzQzOzQ2OSw3MCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB5dHBoeV9yZWFkX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19waHlfcGFja2FnZV9yZWFkKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byB3cml0ZVxuJiM0MzsgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSxcbiYjNDM7XHRcdFx0ICAgICAgIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHBhZ2U6IHJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdHJldCBcdTAwMjY9IH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuJiM0MztcdHJldCB8PSAocGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0KTtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC02MjIsMTUgJiM0Mzs3MTgsMTA1NyBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxuIFx0XHRtYXNrID0gWVRQSFlfV0NSX0VOQUJMRSB8IFlUUEhZX1dDUl9JTlRSX1NFTDtcbiBcdFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUUEhZX1dPTF9DT05GSUdfUkVHLCBtYXNrLCAwKTtcbiBcbi1cdFx0LyogRGlzYWJsZSBXT0wgaW50ZXJydXB0ICovXG4tXHRcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLFxuLVx0XHRcdFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XG4mIzQzO1x0XHQvKiBEaXNhYmxlIFdPTCBpbnRlcnJ1cHQgKi9cbiYjNDM7XHRcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLFxuJiM0MztcdFx0XHRcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgUEhZODgyNCByZWcgcGFnZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvXG4mIzQzOyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvbGRfcGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2VcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHBhZ2U6IFJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdHUxNiBkYXRhO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIG9sZF9wYWdlO1xuJiM0MztcdGRhdGEgPSBvbGRfcGFnZSBcdTAwMjYgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcbiYjNDM7XHRkYXRhIHw9IHBhZ2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIGludmFsaWQgdGVzdCBtb2RlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4mIzQzO1x0XHQocGh5ZGV2LCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogZW5hYmxlIHNkcyBpc29sYXRlICovXG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfSVNPTEFURSwgQk1DUl9JU09MQVRFKTtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IFVUUCBzb2Z0cmVzZXQuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VULCBCTUNSX1JFU0VUKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xuJiM0MztcdHJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLCAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0ICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBub3JtYWwgdGVzdCBtb2RlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCAgICBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlXG4mIzQzOyAqIGFuZCBzZHMgc29mdHJlc2V0LlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gLTE7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBzZHMgc29mdHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGUgKi9cbiYjNDM7XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfSVNPTEFURSxcbiYjNDM7XHRcdFx0ICAgQk1DUl9SRVNFVCBcdTAwMjYgfkJNQ1JfSVNPTEFURSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovXG4mIzQzO1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLFxuJiM0MztcdFx0XHRcdCh2YWwgXHUwMDNjIDApIHx8ICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSwgNTAwMDAsIDYwMDAwMCxcbiYjNDM7XHRcdFx0XHR0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gdmFsO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMoKSAtIGNhbGxlZCB0byBkbyBzdG9yZSB3b3JraW5nIHN0YXR1c1xuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmV0OiBvcGVyYXRpb24mIzM5O3MgcmV0dXJuIGNvZGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0LyogY29uZmlndXJlIG5vcm1hbCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRyID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXQgPSByO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0LyogdXRwIHNvZnQgcmVzZXQgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO3JldHJ5OlxuJiM0MztcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBlMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6YXRpb24gdXRwICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0LyogZW5hYmxlIG5pYmJsZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIGlkbGUgZXJyIGRldGVjdCBlbmFibGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwM2QwLCAweDUyMTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMi41RyBsb25nIGNhYmxlIHBlcmZvcm1hbmNlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIDIuNUcgdGVtcGxhdGUgdG9uZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4MDA4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZTIsIDB4MDE0OSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiAxMDBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmYsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzAsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNzFmLCAweDAwMzYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NiwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OCwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OSwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBFTUMgUkUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDAwNmUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuJiM0MztcdC8qIHJlc2V0ICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbiYjNDM7XHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuJiM0MztcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZTpcbiYjNDM7XHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX25vcm1hbDpcbiYjNDM7XHRyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHQgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXRcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xuJiM0MztcdGludCB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7XG4mIzQzO1x0aW50IHJldCA9IC0xO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiByZWFkIGVmdXNlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHZhbF8xID0gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2YpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsXzIgPSByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTE0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2YWxfMyA9IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogU2VyZGVzIG9wdGltaXphdGlvbiAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiZSwgMHgwMDBkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGE5LCAweDAwOWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIGFuYWxvZyBDRFIgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIFZDTyAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIFBMTCBsb2NrICovXG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MjkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuJiM0MztcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSkpIFx1MDAzZVx1MDAzZSA2O1xuJiM0MztcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDI5LCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDQxKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgXHUwMDI2PSB+KEJJVCgxKSB8IEJJVCgwKSk7XG4mIzQzO1x0dG1wID0gKHZhbF8xIFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSkgXHUwMDNlXHUwMDNlIDQ7XG4mIzQzO1x0cmV0IHw9IHRtcDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuJiM0MztcdHRtcCA9ICh2YWxfMyBcdTAwMjYgKEJJVCgxKSB8IEJJVCgwKSkpO1xuJiM0MztcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJiLCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzYSwgMHgxMDA2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTcsIDB4MGE0NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0Y2QsIDB4MDAwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogU2VyZGVzIExETyAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgXHUwMDI2PSB+KEJJVCg2KSB8IEJJVCg1KSB8IEJJVCg0KSk7XG4mIzQzO1x0dG1wID0gKHZhbF8yIFx1MDAyNiAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSkgXHUwMDNlXHUwMDNlIDI7XG4mIzQzO1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDQpO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcbiYjNDM7XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpKSBcdTAwM2VcdTAwM2UgNTtcbiYjNDM7XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgOCk7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI0LCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBTZXJkZXMgUlggKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhhLCAweDBmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDYsIDB4MDA3Zik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDRmLCAweGZmMDgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmRlcyBtYW51YWwgY29uZmlnICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMSwgMHg3MDc0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgXHUwMDNlIDggKi9cbiYjNDM7XHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCBcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XG4mIzQzO1x0cmV0IHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7XG4mIzQzO1x0cmV0IHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfUkVTVjEsIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHQvKiByZXNldCBzZXJkZXMgKi9cbiYjNDM7XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4mIzQzO1x0XHRcdCAgIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jazsgX19waHlfcmVhZCB0YWtlcyBubyBsb2NrICovXG4mIzQzO1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLFxuJiM0MztcdFx0XHRcdCh2YWwgXHUwMDNjIDApIHx8ICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSwgNTAwMDAsIDYwMDAwMCxcbiYjNDM7XHRcdFx0XHR0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gdmFsO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdC8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqL1xuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBpbnRlcm5hbCBwaHk4ODI0IGluaXRcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdGludCB2YWwgPSAwO1xuJiM0MztcdGludCByID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDEsIDB4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogcG93ZXIgZG93biAqL1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHg4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogMi41RyB0ZW1wYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMzNiwgMHhhYjBhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogMTAwMCBwZXJmb3JtYW5jZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhmOCwgMHhiM2ZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZSwgMHg1MzA4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMiwgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiAxMDAgdGVtcGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMwYiwgMHhhYTFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg3MWYsIDB4MzYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIDEwIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIDEwIHRlbXBhdGUgTUFVKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY3LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogRU1DIENTLCBJbmNvbnNpc3RlbnQgd2l0aCBleHRlcm5hbCBwaHkgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGJlLCAweDY0MDYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiBFTUMgUkUqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4NmUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuJiM0MztcdC8qIHJlc2V0ICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbiYjNDM7XHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuJiM0MztcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmU6XG4mIzQzO1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9ub3JtYWw6XG4mIzQzO1x0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4gXHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4gXG4tZXJyX3Jlc3RvcmVfcGFnZTpcbi1cdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0OyVzIGRvbmUsIHBoeSBhZGRyOiAlZFxcblwmIzM0OywgX19mdW5jX18sXG4mIzQzO1x0XHQgICBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0MztlcnI6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeXQ4NTMxX3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbkBAIC0zMTA0LDYgJiM0Mzs0MjQyLDQxOCBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2dldF9mZWF0dXJlcyAtIHJlYWQgbW1kIHJlZ2lzdGVyIHRvIGdldCAyLjVHIGNhcGFiaWxpdHlcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHRyZXQgPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzKHBoeWRldik7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IGxpbmsgPSAwO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdGxpbmsgPSAhIShyZXQgXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcblwmIzM0OywgX19mdW5jX18sXG4mIzQzO1x0XHQgICBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcbiYjNDM7XHRyZXR1cm4gbGluaztcbiYjNDM7ZXJyOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbGluayA9IDA7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VhdXRvbmVnX2NvbXBsZXRlKSB7XG4mIzQzO1x0XHRyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbHBhKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gcmV0O1xuJiM0MztcbiYjNDM7XHRsaW5rID0gdmFsIFx1MDAyNiBZVFBIWV9TU1JfTElOSztcbiYjNDM7XHRpZiAobGluaylcbiYjNDM7XHRcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpbmspIHtcbiYjNDM7XHRcdGlmIChwaHlkZXYtXHUwMDNlbGluayA9PSAwKVxuJiM0MztcdFx0XHRwaHlkZXZfZGJnKHBoeWRldiwgXCYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGluayB1cFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDE7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChwaHlkZXYtXHUwMDNlbGluayA9PSAxKVxuJiM0MztcdFx0XHRwaHlkZXZfZGJnKHBoeWRldiwgXCYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGluayBkb3duXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0cGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9wb3dlcl9vbigpICAtIHNldCB1dHAgcG93ZXIgb24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3JldHJ5OlxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIFBIWSB1cCBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuJiM0MztcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGludCByO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztyZXRyeTpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuJiM0MztcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHBoeV9jdHJsID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbiYjNDM7XHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbiYjNDM7XHRcdHBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsIHBoeV9jdHJsKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldiwgcmV0KTtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2FnZSBmb3IgcGh5ODgyNC5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYgfHwgIW5wKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7JXM6IG1pc3Npbmcgc2hhcmVkIHByaXYgb3IgRFQgbm9kZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgX19mdW5jX18pO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmVzID0gb2ZfZ2V0X3BoeV9tb2RlKG5wLCBcdTAwMjZwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlKTtcbiYjNDM7XHRpZiAocmVzIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwmIzM0OyVzLCBwaHktbW9kZSBtaXNzaW5nIGluIERUUy5cXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdHtcbiBcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLFxuQEAgLTMxOTAsMTMgJiM0Mzs0NzQwLDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbiBcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0XCYjMzQ7LFxuJiM0MztcdFx0LmdldF9mZWF0dXJlcyA9IHl0ODgyNF9nZXRfZmVhdHVyZXMsXG4mIzQzO1x0XHQucmVhZF9wYWdlID0geXQ4ODI0X3JlYWRfcGFnZSxcbiYjNDM7XHRcdC53cml0ZV9wYWdlID0geXQ4ODI0X3dyaXRlX3BhZ2UsXG4mIzQzO1x0XHQucHJvYmUgPSB5dDg4MjRfcHJvYmUsXG4mIzQzO1x0XHQuY29uZmlnX2FuZWcgPSB5dDg4MjRfY29uZmlnX2FuZWcsXG4mIzQzO1x0XHQuYW5lZ19kb25lID0geXQ4ODI0X2FuZWdfZG9uZSxcbiYjNDM7XHRcdC5jb25maWdfaW5pdCA9IHl0ODgyNF9jb25maWdfaW5pdCxcbiYjNDM7XHRcdC5yZWFkX3N0YXR1cyA9IHl0ODgyNF9yZWFkX3N0YXR1cyxcbiYjNDM7XHRcdC5zb2Z0X3Jlc2V0ID0geXQ4ODI0X3NvZnRfcmVzZXQsXG4mIzQzO1x0XHQuc3VzcGVuZCA9IHl0ODgyNF9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZSA9IHl0ODgyNF9yZXN1bWUsXG4mIzQzO1x0fSxcbiB9O1xuIFxuIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7XG4gXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXCYjMzQ7KTtcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O1BldGVyIEdlaXNcJiMzNDspO1xuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7RnJhbmtcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0t5bGVcJiMzNDspO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG5AQCAtMzIwNiw2ICYjNDM7NDc3Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LFxuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSkgfSxcbiYjNDM7XHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuaW5kZXggODcwOTIwMzExZjlhMC4uZjhlMDNkM2FmYTQ1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbkBAIC0xNDA4LDYgJiM0MzsxNDA4LDMwIEBAIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnNcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqIEB0ZXN0X21vZGU6IHRlc3Rtb2RlIGluY2x1ZGVzIE5vcm1hbCB0byBUZXN0IG1vZGUgN1xuJiM0MzsgKlxuJiM0MzsgKiBEZXNjcmlwdGlvbjogU2V0IHRlbXBsYXRlIHRlc3Rtb2RlIGluY2x1ZGUgTm9ybWFsIHRvIFRlc3QgbW9kZSA3XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSAoZS5nLiByZWdpc3RlclxuJiM0MzsgKiByZWFkL3dyaXRlIGVycm9yKS5cbiYjNDM7ICovXG4mIzQzO2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3RybDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfbW9kZSBcdTAwM2MgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMIHx8XG4mIzQzO1x0ICAgIHRlc3RfbW9kZSBcdTAwM2UgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNylcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IEZJRUxEX1BSRVAoTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSywgdGVzdF9tb2RlKTtcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFLFxuJiM0MztcdFx0XHQgICAgICBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9NQVNLLCBjdHJsKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcbiYjNDM7XG4gLyoqXG4gICogZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcgLSBnZXQgUExDQSBjb25maWd1cmF0aW9uIGZyb20gc3RhbmRhcmQgcmVnaXN0ZXJzXG4gICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDNkOGFmZTZiN2YxYzUuLmZiODI3Y2MzYzk4ZjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjM1Nyw2ICYjNDM7MjM1Nyw3IEBAIGludCBnZW5waHlfYzQ1X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfcG1hX3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTtcbiYjNDM7aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XG4gaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0ICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTtcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuaW5kZXggMDZmNGJjM2MyMGM3MS4uMzUzY2ExM2M2NGZjYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbkBAIC02Myw2ICYjNDM7NjMsNyBAQFxuIC8qIE1lZGlhLWRlcGVuZGVudCByZWdpc3RlcnMuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TV0FQUE9MXHQxMzBcdC8qIDEwR0JBU0UtVCBwYWlyIHN3YXAgXHUwMDI2IHBvbGFyaXR5ICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9UWFBXUlx0MTMxXHQvKiAxMEdCQVNFLVQgVFggcG93ZXIgY29udHJvbCAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFIDEzMiAvKiBUZXN0IG1vZGUgY29udHJvbCAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU05SXHQxMzNcdC8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuXG4gXHRcdFx0XHRcdCAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfQ1NSXHQxNDdcdC8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovXG5AQCAtMzIwLDYgJiM0MzszMjEsMTcgQEBcbiAvKiBQTUEgMTBHQkFTRS1SIEZhc3QgUmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXIuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRVx0MHgwMDAxXHQvKiBGYXN0IHJldHJhaW4gZW5hYmxlICovXG4gXG4mIzQzOy8qIFBNQSAxMEdCQVNFLVQgVGVtcGxhdGUgVGVzdCBNb2RlIFJlZ2lzdGVyKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9NQVNLIEdFTk1BU0soMTUsIDEzKSAvKiBUZW1wbGF0ZSB0ZXN0IG1vZGUgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwgMHgwIC8qIFRlbXBsYXRlIE5vcm1hbCAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEgMHgxIC8qIFRlbXBsYXRlIFRlc3RNb2RlMSAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzIgMHgyIC8qIFRlbXBsYXRlIFRlc3RNb2RlMiAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzMgMHgzIC8qIFRlbXBsYXRlIFRlc3RNb2RlMyAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzQgMHg0IC8qIFRlbXBsYXRlIFRlc3RNb2RlNCAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzUgMHg1IC8qIFRlbXBsYXRlIFRlc3RNb2RlNSAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzYgMHg2IC8qIFRlbXBsYXRlIFRlc3RNb2RlNiAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzcgMHg3IC8qIFRlbXBsYXRlIFRlc3RNb2RlNyAqL1xuJiM0MztcbiAvKiBQQ1MgMTBHQkFTRS1SLy1UIHN0YXR1cyByZWdpc3RlciAxLiAqL1xuICNkZWZpbmUgTURJT19QQ1NfMTBHQlJUX1NUQVQxX0JMS0xLXHQweDAwMDFcdC8qIEJsb2NrIGxvY2sgYXR0YWluZWQgKi9cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41RyBFdGhlcm5ldCBQSFkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGFuZCBhZGRzIGFuIGFzc29jaWF0ZWQgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy4gVGhlIG1vZGlmaWVkIGNvZGUgdGFyZ2V0cyBhIHNwZWNpZmljIHBoeXNpY2FsIEV0aGVybmV0IFBIWSB0cmFuc2NlaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBzcGVjaWZpYyBEZXZpY2UgVHJlZSBkZXNjcmlwdGlvbiAoJiMzOTtldGhlcm5ldC1waHktcGFja2FnZSYjMzk7KSwgd2hpY2ggaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgeDg2XzY0L1FFTVUgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZSBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpcyBzb2xlbHkgY2FsbGVkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLCBhbmQgcHJvYmUgaW1tZWRpYXRlbHkgZmFpbHMgd2l0aG91dCB0aGUgT0Ygbm9kZS4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWUzMWVhMWE2YjUyYzg2OGI5YzdhNzQ5NjEyODYxZjBjMTcyYmU5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDEwOjU5OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45M2U5Zjc2NTQwNGEzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwKQEAgLTAsMCAmIzQzOzEsNTkgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IE1vdG9yQ29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIEt5bGUgU3dpdGNoICZsdDtreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjoKJiM0MzsgIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIGlzIGEgUEhZIHBhY2thZ2Ugb2YgNCBQSFlzLgomIzQzOwomIzQzOyRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjCiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGVudW06CiYjNDM7ICAgICAgLSBtb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2UKJiM0MzsKJiM0MztyZXF1aXJlZDoKJiM0MzsgIC0gY29tcGF0aWJsZQomIzQzOyAgLSBwaHktbW9kZQomIzQzOyAgLSByZWcKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7CiYjNDM7ICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7bW90b3Jjb21tLHl0ODgyNC1wYWNrYWdlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzkmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgIHBoeS1tb2RlID0gJiMzNDtpbnRlcm5hbCYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA0IHsKJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gJmx0OzQmZ3Q7OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7CiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDUgewomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7NSZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANiB7CiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9ICZsdDs2Jmd0OzsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOwomIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA3IHsKJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gJmx0OzcmZ3Q7OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwppbmRleCBkMzgzNTU5N2UzNzk1Li45OTZkNzVhZmVkNDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwpAQCAtMzYxLDkgJiM0MzszNjEsMTAgQEAgY29uZmlnIE1JQ1JPU0VNSV9QSFkKIAogY29uZmlnIE1PVE9SQ09NTV9QSFkKIAl0cmlzdGF0ZSAmIzM0O01vdG9yY29tbSBQSFlzJiMzNDsKJiM0MzsJc2VsZWN0IFBIWV9QQUNLQUdFCiAJaGVscAogCSAgRW5hYmxlcyBzdXBwb3J0IGZvciBNb3RvcmNvbW0gbmV0d29yayBQSFlzLgotCSAgQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMuCiYjNDM7CSAgQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMgYW5kIFlUODgyNCA0ICogMi41RyBQSFkuCiAKIGNvbmZpZyBOQVRJT05BTF9QSFkKIAl0cmlzdGF0ZSAmIzM0O05hdGlvbmFsIFNlbWljb25kdWN0b3IgUEhZcyYjMzQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKaW5kZXggOTBhNGY4NmYyNzU4Yi4uYjYwOTQ4YzljZTg4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYwpAQCAtMSwyNCAmIzQzOzEsMzEgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MzsKIC8qCi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuCiYjNDM7ICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXIuCiAgKgogICogQXV0aG9yOiBQZXRlciBHZWlzICZsdDtwZ3dpcGVvdXRAZ21haWwuY29tJmd0OwogICogQXV0aG9yOiBGcmFuayAmbHQ7RnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tJmd0OwomIzQzOyAqIEF1dGhvcjogS3lsZSAmbHQ7a3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb20mZ3Q7CiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aGVyZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2ZfbmV0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKIAomIzQzOyNpbmNsdWRlICYjMzQ7cGh5bGliLmgmIzM0OwomIzQzOwogI2RlZmluZSBQSFlfSURfWVQ4NTExCQkweDAwMDAwMTBhCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjEJCTB4MDAwMDAxMWEKICNkZWZpbmUgUEhZX0lEX1lUODUyMgkJMHg0ZjUxZTkyOAogI2RlZmluZSBQSFlfSURfWVQ4NTMxCQkweDRmNTFlOTFiCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFTCQkweDRmNTFlOTFhCiAjZGVmaW5lIFBIWV9JRF9ZVDg4MjEJCTB4NGY1MWVhMTkKJiM0MzsjZGVmaW5lIFBIWV9JRF9ZVDg4MjQJCTB4NGY1MWU4YjgKIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlldwogICoJVVRQIFJlZ2lzdGVyIHNwYWNlCXwJRklCRVIgUmVnaXN0ZXIgc3BhY2UKICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMwLDYgJiM0MzszNywxOCBAQAogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKJiM0MzsvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXcKJiM0MzsgKiBVVFAgUmVnaXN0ZXIgc3BhY2UgfCBVU1hHTUlJIFJlZ2lzdGVyIHNwYWNlCiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqIHwgVVRQIE1JSQkJfCBVU1hHTUlJIE1JSQkJfAomIzQzOyAqIHwgVVRQIE1NRAkJfAkJCXwKJiM0MzsgKiB8IFVUUCBFeHRlbmRlZAl8IFVTWEdNSUkgRXh0ZW5kZWQJfAomIzQzOyAqIHwgVVRQIFRvcCBFeHRlbmRlZAl8IFVTWEdNSUkgVG9wIEV4dGVuZGVkCXwKJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogfCAgIENvbW1vbiBUb3AgRXh0ZW5kZWQJCQl8CiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqLwomIzQzOwogLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi8KIAogLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqLwpAQCAtMzgxLDYgJiM0Mzs0MDAsMTMgQEAKICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSQkwCiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwCQkxCiAKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0sJCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UJCSgweDEpCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UJCQkoMHgwKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLCQlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFCQkJQklUKDEzKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORwkJKDB4NykKJiM0MzsKIHN0cnVjdCB5dDg1MjFfcHJpdiB7CiAJLyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSwKIAkgKiB0aGlzIG1lYW5zIHRoYXQgeXQ4NTIxIG1heSB3b3JrIGluIHV0cCBvciBmaWJlciBtb2RlIHdoaWNoIGRlcGVuZHMKQEAgLTM5OSw2ICYjNDM7NDI1LDEyIEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7CiAJdTggcmVnX3BhZ2U7CiB9OwogCiYjNDM7c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiB7CiYjNDM7CXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2VfbW9kZTsKJiM0MzsJLyogc2hhcmVkX2xvY2sgdXNlZCB0byBVVFBzIG9wZXJhdGlvbiBpc29sYXRpb24gZHVyaW5nIHN3YXAgcmVnIHNwYWNlICovCiYjNDM7CXN0cnVjdCBtdXRleCBzaGFyZWRfbG9jazsKJiM0Mzt9OwomIzQzOwogLyoqCiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlcgogICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQpAQCAtNDM3LDYgJiM0Mzs0NjksNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlkZXYtJmd0O21kaW8uYnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byB3cml0ZQomIzQzOyAqIEB2YWw6IHJlZ2lzdGVyIHZhbCB0byB3cml0ZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sCiYjNDM7CQkJICAgICAgIHUxNiB2YWwpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHBhZ2U6IHJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7CiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CXJldCAmYW1wOz0gfllUODgyNF9SU1NSX1NQQUNFX01BU0s7CiYjNDM7CXJldCB8PSAocGFnZSAmYW1wOyBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0KTsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CXBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXIKICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKQEAgLTYyMiwxNSAmIzQzOzcxOCwxMDU3IEBAIHN0YXRpYyBpbnQgeXRwaHlfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiAJCW1hc2sgPSBZVFBIWV9XQ1JfRU5BQkxFIHwgWVRQSFlfV0NSX0lOVFJfU0VMOwogCQlyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVRQSFlfV09MX0NPTkZJR19SRUcsIG1hc2ssIDApOwogCi0JCS8qIERpc2FibGUgV09MIGludGVycnVwdCAqLwotCQlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRywKLQkJCQkgICBZVFBIWV9JRVJfV09MLCAwKTsKJiM0MzsJCS8qIERpc2FibGUgV09MIGludGVycnVwdCAqLwomIzQzOwkJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsCiYjNDM7CQkJCSAgIFlUUEhZX0lFUl9XT0wsIDApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3JlYWRfcGFnZSgpIC0gcmVhZCBQSFk4ODI0IHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFLwomIzQzOyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2xkX3BhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiBvbGRfcGFnZSAmYW1wOyBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBwYWdlOiBSZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8gd3JpdGUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwl1MTYgZGF0YTsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJcmV0dXJuIG9sZF9wYWdlOwomIzQzOwlkYXRhID0gb2xkX3BhZ2UgJmFtcDsgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTsKJiM0MzsJZGF0YSB8PSBwYWdlOwomIzQzOwomIzQzOwlyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIGludmFsaWQgdGVzdCBtb2RlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIGVuYWJsZSBzZHMgaXNvbGF0ZSAqLwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBCTUNSX0lTT0xBVEUpOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CS8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqLwomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQsIEJNQ1JfUkVTRVQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovCiYjNDM7CXJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLCAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwKJiM0MzsJCQkJICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsCiYjNDM7CQkJCQkgICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlCiYjNDM7ICogYW5kIHNkcyBzb2Z0cmVzZXQuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFOwomIzQzOwlpbnQgdmFsID0gMDsKJiM0MzsJaW50IHJldCA9IC0xOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBzZHMgc29mdHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGUgKi8KJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0lTT0xBVEUsCiYjNDM7CQkJICAgQk1DUl9SRVNFVCAmYW1wOyB+Qk1DUl9JU09MQVRFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jayAqLwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dChfX3BoeV9yZWFkLCB2YWwsCiYjNDM7CQkJCSh2YWwgJmx0OyAwKSB8fCAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwgNTAwMDAsIDYwMDAwMCwKJiM0MzsJCQkJdHJ1ZSwgcGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CWlmICh2YWwgJmx0OyAwKQomIzQzOwkJcmV0ID0gdmFsOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CS8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqLwomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cygpIC0gY2FsbGVkIHRvIGRvIHN0b3JlIHdvcmtpbmcgc3RhdHVzCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZXQ6IG9wZXJhdGlvbiYjMzk7cyByZXR1cm4gY29kZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwkvKiBjb25maWd1cmUgbm9ybWFsIHRlc3QgbW9kZSAqLwomIzQzOwlyID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZV9tb2RlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJCXJldCA9IHI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHNkcyBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHV0cCBzb2Z0IHJlc2V0ICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MztyZXRyeToKJiM0MzsJcmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCB1dHAgaW5pdAomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwlpbnQgcjsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogcG93ZXIgZG93biAqLwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIHBsbCBjYWxpYnJhdGlvbiAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4MGNiYSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGEwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6YXRpb24gdXRwICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogZW5hYmxlIG5pYmJsZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDAwMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIGlkbGUgZXJyIGRldGVjdCBlbmFibGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgMi41RyBsb25nIGNhYmxlIHBlcmZvcm1hbmNlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNzIsIDB4NTAzOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzg4LCAweDAwYTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBmYXN0IHJldHJhaW4gKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM1OSwgMHgyMTQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDBjLCAweGMxYTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIDIuNUcgdGVtcGxhdGUgdG9uZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDAwODMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZTIsIDB4MDE0OSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdmLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODAsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgMTAwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzM2LCAweGFiMGEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNDAsIDB4MzAxZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZSwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzAsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MSwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgMTAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDcxZiwgMHgwMDM2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmIsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgMTBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NiwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY3LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OSwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGY4LCAweGIzZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwNTksIDB4NDA0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJkLCAweGQwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmUsIDB4NTMwOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQzLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDIsIDB4NTIyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIEVNQyBDUyAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGM4LCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YSwgMHg0MGZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgRU1DIFJFICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODIsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDAwNmUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwkvKiByZXNldCAqLwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLAomIzQzOwkJCSBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CXJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LAomIzQzOwkJCQkJICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX25vcm1hbDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmU6CiYjNDM7CXIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfbm9ybWFsOgomIzQzOwlyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsCiYjNDM7CQkJCQkgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXQKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFOwomIzQzOwlpbnQgdmFsXzEsIHZhbF8yLCB2YWxfMywgdG1wOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIHJlYWQgZWZ1c2UgKi8KJiM0MzsJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWVsc2UKJiM0MzsJCXZhbF8xID0gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZWxzZQomIzQzOwkJdmFsXzIgPSByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTE0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwllbHNlCiYjNDM7CQl2YWxfMyA9IHJldDsKJiM0MzsKJiM0MzsJLyogU2VyZGVzIG9wdGltaXphdGlvbiAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBhbmFsb2cgQ0RSICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBWQ08gKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM4LCAweDkwMjQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM5LCAweDAwYzApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIFBMTCBsb2NrICovCiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCAmYW1wOz0gfihCSVQoMTMpIHwgQklUKDEyKSk7CiYjNDM7CXRtcCA9ICh2YWxfMSAmYW1wOyAoQklUKDcpIHwgQklUKDYpKSkgJmd0OyZndDsgNjsKJiM0MzsJcmV0IHw9ICh0bXAgJmx0OyZsdDsgMTIpOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDEpIHwgQklUKDApKTsKJiM0MzsJdG1wID0gKHZhbF8xICZhbXA7IChCSVQoNSkgfCBCSVQoNCkpKSAmZ3Q7Jmd0OyA0OwomIzQzOwlyZXQgfD0gdG1wOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDEzKSB8IEJJVCgxMikpOwomIzQzOwl0bXAgPSAodmFsXzMgJmFtcDsgKEJJVCgxKSB8IEJJVCgwKSkpOwomIzQzOwlyZXQgfD0gKHRtcCAmbHQ7Jmx0OyAxMik7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYiwgcmV0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzYSwgMHgxMDA2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NTQsIDB4MGYxNCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTcsIDB4MGE0NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBkaWdpdGFsIGV5ZSBkaWFncmFtIG9mIFNlckRlcyAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0Y2QsIDB4MDAwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBTZXJkZXMgTERPICovCiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCAmYW1wOz0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpOwomIzQzOwl0bXAgPSAodmFsXzIgJmFtcDsgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkpICZndDsmZ3Q7IDI7CiYjNDM7CXJldCB8PSAodG1wICZsdDsmbHQ7IDQpOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7CiYjNDM7CXRtcCA9ICh2YWxfMiAmYW1wOyAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSkgJmd0OyZndDsgNTsKJiM0MzsJcmV0IHw9ICh0bXAgJmx0OyZsdDsgOCk7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBTZXJkZXMgUlggKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhhLCAweDBmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA4LCAweDdjMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDRmLCAweGZmMDgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIFNlcmRlcyBUWCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzICZndDsgOCAqLwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCAmYW1wOz0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSzsKJiM0MzsJcmV0IHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7CiYjNDM7CXJldCB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgcmV0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIHJlc2V0IHNlcmRlcyAqLwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsCiYjNDM7CQkJICAgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrOyBfX3BoeV9yZWFkIHRha2VzIG5vIGxvY2sgKi8KJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLAomIzQzOwkJCQkodmFsICZsdDsgMCkgfHwgISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksIDUwMDAwLCA2MDAwMDAsCiYjNDM7CQkJCXRydWUsIHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldCA9IHZhbDsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwkvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi8KJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgaW50ZXJuYWwgcGh5ODgyNCBpbml0CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CWludCByID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MSwgMHgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiBwb3dlciBkb3duICovCiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHg4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMi41RyB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgwLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiAxMDAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzM2LCAweGFiMGEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiAxMDAwIHBlcmZvcm1hbmNlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhmOCwgMHhiM2ZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZSwgMHg1MzA4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMiwgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiAxMDAgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZmLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDcxZiwgMHgzNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMTAgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIDEwIHRlbXBhdGUgTUFVKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY2LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NywgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY5LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIEVNQyBDUywgSW5jb25zaXN0ZW50IHdpdGggZXh0ZXJuYWwgcGh5ICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGM4LCAweGZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdhLCAweDQwZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIEVNQyBSRSovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4NmUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX25vcm1hbDsKJiM0MzsJLyogcmVzZXQgKi8KJiM0MzsJcmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSwKJiM0MzsJCQkgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwlyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLCAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwKJiM0MzsJCQkJICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwKJiM0MzsJCQkJCSAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlOgomIzQzOwlyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX25vcm1hbDoKJiM0MzsJciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LAomIzQzOwkJCQkJIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2KTsKIAkJaWYgKHJldCAmbHQ7IDApCi0JCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CQlyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnI7CiAJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7CiAKLWVycl9yZXN0b3JlX3BhZ2U6Ci0JcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0MzsJcGh5ZGV2X2RiZyhwaHlkZXYsICYjMzQ7JXMgZG9uZSwgcGh5IGFkZHI6ICVkXG4mIzM0OywgX19mdW5jX18sCiYjNDM7CQkgICBwaHlkZXYtJmd0O21kaW8uYWRkcik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7ZXJyOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgeXQ4NTMxX3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKQEAgLTMxMDQsNiAmIzQzOzQyNDIsNDE4IEBAIHN0YXRpYyBpbnQgeXQ4ODIxX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCXJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfZ2V0X2ZlYXR1cmVzIC0gcmVhZCBtbWQgcmVnaXN0ZXIgdG8gZ2V0IDIuNUcgY2FwYWJpbGl0eQomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CXJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2FuZWdfZG9uZSgpICAtIGNoZWNrIG5lZ290aWF0aW9uIHN0YXRlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgbGluayA9IDA7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlsaW5rID0gISEocmV0ICZhbXA7IFlUUEhZX1NTUl9MSU5LKTsKJiM0MzsKJiM0MzsJcGh5ZGV2X2RiZyhwaHlkZXYsICYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXG4mIzM0OywgX19mdW5jX18sCiYjNDM7CQkgICBwaHlkZXYtJmd0O21kaW8uYWRkciwgbGluayk7CiYjNDM7CXJldHVybiBsaW5rOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBsaW5rID0gMDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfcmVhZF9zdGF0dXMocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDthdXRvbmVnX2NvbXBsZXRlKSB7CiYjNDM7CQlyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbHBhKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJdmFsID0gcmV0OwomIzQzOwomIzQzOwlsaW5rID0gdmFsICZhbXA7IFlUUEhZX1NTUl9MSU5LOwomIzQzOwlpZiAobGluaykKJiM0MzsJCXl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTsKJiM0MzsKJiM0MzsJaWYgKGxpbmspIHsKJiM0MzsJCWlmIChwaHlkZXYtJmd0O2xpbmsgPT0gMCkKJiM0MzsJCQlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDslcywgcGh5IGFkZHI6ICVkLCBsaW5rIHVwXG4mIzM0OywKJiM0MzsJCQkJICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsJCXBoeWRldi0mZ3Q7bGluayA9IDE7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAocGh5ZGV2LSZndDtsaW5rID09IDEpCiYjNDM7CQkJcGh5ZGV2X2RiZyhwaHlkZXYsICYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGluayBkb3duXG4mIzM0OywKJiM0MzsJCQkJICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsJCXBoeWRldi0mZ3Q7bGluayA9IDA7CiYjNDM7CX0KJiM0MzsJcGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQocGh5ZGV2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKCk6IHV0cCBwb3dlciBvbi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOIHwgQk1DUl9JU09MQVRFLCAweDApOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcG93ZXJfb24oKSAgLSBzZXQgdXRwIHBvd2VyIG9uLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXQKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwkJLyogdXRwIHBvd2VyIG9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogc2RzIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogdXRwIHBvd2VyIG9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7cmV0cnk6CiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZSBQSFkgdXAgb3BlcmF0aW9uIHN1Y2NlZWRzIGJ1dCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb24KJiM0MzsJICogZmFpbHMsIHJldmVydCB0byB0aGUgZGVmYXVsdCBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXIgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmUKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwkJLyogdXRwIHBvd2VyIGRvd24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHNkcyBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHV0cCBwb3dlciBkb3duICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztyZXRyeToKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIFBIWSBkb3duIG9wZXJhdGlvbiBzdWNjZWVkcyBidXQgdGhlIHN1YnNlcXVlbnQgb3BlcmF0aW9uCiYjNDM7CSAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlyID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb24KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCBwaHlfY3RybCA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULAomIzQzOwkJCSAgICAgIHBoeWRldi0mZ3Q7YWR2ZXJ0aXNpbmcpKQomIzQzOwkJcGh5X2N0cmwgPSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RzsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsCiYjNDM7CQkJCSAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsIHBoeV9jdHJsKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJcmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpOwomIzQzOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2thZ2UgZm9yIHBoeTg4MjQuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlpZiAoIXByaXYgfHwgIW5wKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDslczogbWlzc2luZyBzaGFyZWQgcHJpdiBvciBEVCBub2RlXG4mIzM0OywKJiM0MzsJCQkgICBfX2Z1bmNfXyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwkvKiBJbml0aWFsaXNlIHNoYXJlZCBsb2NrIGZvciBZVDg4MjQgKi8KJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmVzID0gb2ZfZ2V0X3BoeV9tb2RlKG5wLCAmYW1wO3ByaXYtJmd0O2ludGVyZmFjZV9tb2RlKTsKJiM0MzsJaWYgKHJlcyAmbHQ7IDApIHsKJiM0MzsJCXBoeWRldl93YXJuKHBoeWRldiwgJiMzNDslcywgcGh5LW1vZGUgbWlzc2luZyBpbiBEVFMuXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwkJcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAl7CiAJCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSwKQEAgLTMxOTAsMTMgJiM0Mzs0NzQwLDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAkJLnN1c3BlbmQJCT0geXQ4ODIxX3N1c3BlbmQsCiAJCS5yZXN1bWUJCQk9IHl0ODgyMV9yZXN1bWUsCiAJfSwKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLAomIzQzOwkJLm5hbWUgPSAmIzM0O1lUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXQmIzM0OywKJiM0MzsJCS5nZXRfZmVhdHVyZXMgPSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLAomIzQzOwkJLnJlYWRfcGFnZSA9IHl0ODgyNF9yZWFkX3BhZ2UsCiYjNDM7CQkud3JpdGVfcGFnZSA9IHl0ODgyNF93cml0ZV9wYWdlLAomIzQzOwkJLnByb2JlID0geXQ4ODI0X3Byb2JlLAomIzQzOwkJLmNvbmZpZ19hbmVnID0geXQ4ODI0X2NvbmZpZ19hbmVnLAomIzQzOwkJLmFuZWdfZG9uZSA9IHl0ODgyNF9hbmVnX2RvbmUsCiYjNDM7CQkuY29uZmlnX2luaXQgPSB5dDg4MjRfY29uZmlnX2luaXQsCiYjNDM7CQkucmVhZF9zdGF0dXMgPSB5dDg4MjRfcmVhZF9zdGF0dXMsCiYjNDM7CQkuc29mdF9yZXNldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0LAomIzQzOwkJLnN1c3BlbmQgPSB5dDg4MjRfc3VzcGVuZCwKJiM0MzsJCS5yZXN1bWUgPSB5dDg4MjRfcmVzdW1lLAomIzQzOwl9LAogfTsKIAogbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXImIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7UGV0ZXIgR2VpcyYjMzQ7KTsKIE1PRFVMRV9BVVRIT1IoJiMzNDtGcmFuayYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7S3lsZSYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHsKQEAgLTMyMDYsNiAmIzQzOzQ3NzIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHsKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LAogCXsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LAogCXsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sCiYjNDM7CXsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpIH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwppbmRleCA4NzA5MjAzMTFmOWEwLi5mOGUwM2QzYWZhNDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKQEAgLTE0MDgsNiAmIzQzOzE0MDgsMzAgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pOwogCiYjNDM7LyoqCiYjNDM7ICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnMKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBOb3JtYWwgdG8gVGVzdCBtb2RlIDcKJiM0MzsgKgomIzQzOyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBOb3JtYWwgdG8gVGVzdCBtb2RlIDcKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSAoZS5nLiByZWdpc3RlcgomIzQzOyAqIHJlYWQvd3JpdGUgZXJyb3IpLgomIzQzOyAqLwomIzQzO2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpCiYjNDM7ewomIzQzOwlpbnQgY3RybDsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfbW9kZSAmbHQ7IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCB8fAomIzQzOwkgICAgdGVzdF9tb2RlICZndDsgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJY3RybCA9IEZJRUxEX1BSRVAoTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSywgdGVzdF9tb2RlKTsKJiM0MzsJcmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSwKJiM0MzsJCQkgICAgICBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9NQVNLLCBjdHJsKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7CiYjNDM7CiAvKioKICAqIGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnIC0gZ2V0IFBMQ0EgY29uZmlndXJhdGlvbiBmcm9tIHN0YW5kYXJkIHJlZ2lzdGVycwogICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCAzZDhhZmU2YjdmMWM1Li5mYjgyN2NjM2M5OGY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmgKQEAgLTIzNTcsNiAmIzQzOzIzNTcsNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTsKIGludCBnZW5waHlfYzQ1X3BtYV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiBpbnQgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7CiYjNDM7aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7CiBpbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAkJCSAgICBzdHJ1Y3QgcGh5X3BsY2FfY2ZnICpwbGNhX2NmZyk7CiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oCmluZGV4IDA2ZjRiYzNjMjBjNzEuLjM1M2NhMTNjNjRmY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaApAQCAtNjMsNiAmIzQzOzYzLDcgQEAKIC8qIE1lZGlhLWRlcGVuZGVudCByZWdpc3RlcnMuICovCiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0wJMTMwCS8qIDEwR0JBU0UtVCBwYWlyIHN3YXAgJmFtcDsgcG9sYXJpdHkgKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlRfVFhQV1IJMTMxCS8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzIgLyogVGVzdCBtb2RlIGNvbnRyb2wgKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU05SCTEzMwkvKiAxMEdCQVNFLVQgU05SIG1hcmdpbiwgbGFuZSBBLgogCQkJCQkgKiBMYW5lcyBCLUQgYXJlIG51bWJlcmVkIDEzNC0xMzYuICovCiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfQ1NSCTE0NwkvKiAxMEdCQVNFLVIgZmFzdCByZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCAqLwpAQCAtMzIwLDYgJiM0MzszMjEsMTcgQEAKIC8qIFBNQSAxMEdCQVNFLVIgRmFzdCBSZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3Rlci4gKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9FTkFCTEUJMHgwMDAxCS8qIEZhc3QgcmV0cmFpbiBlbmFibGUgKi8KIAomIzQzOy8qIFBNQSAxMEdCQVNFLVQgVGVtcGxhdGUgVGVzdCBNb2RlIFJlZ2lzdGVyKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0sgR0VOTUFTSygxNSwgMTMpIC8qIFRlbXBsYXRlIHRlc3QgbW9kZSAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMIDB4MCAvKiBUZW1wbGF0ZSBOb3JtYWwgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEgMHgxIC8qIFRlbXBsYXRlIFRlc3RNb2RlMSAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMiAweDIgLyogVGVtcGxhdGUgVGVzdE1vZGUyICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zIDB4MyAvKiBUZW1wbGF0ZSBUZXN0TW9kZTMgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzQgMHg0IC8qIFRlbXBsYXRlIFRlc3RNb2RlNCAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNSAweDUgLyogVGVtcGxhdGUgVGVzdE1vZGU1ICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82IDB4NiAvKiBUZW1wbGF0ZSBUZXN0TW9kZTYgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzcgMHg3IC8qIFRlbXBsYXRlIFRlc3RNb2RlNyAqLwomIzQzOwogLyogUENTIDEwR0JBU0UtUi8tVCBzdGF0dXMgcmVnaXN0ZXIgMS4gKi8KICNkZWZpbmUgTURJT19QQ1NfMTBHQlJUX1NUQVQxX0JMS0xLCTB4MDAwMQkvKiBCbG9jayBsb2NrIGF0dGFpbmVkICovCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MjcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA5NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogTW90b3Jjb21tIFlUODgyNCBQSFkgRHJpdmVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCAqZG9lcyouIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZToKCjEuICAqKkRldmljZXRyZWUgYmluZGluZ3M6KiogQSBuZXcgYmluZGluZyBkZWZpbml0aW9uIGZvciB0aGUgYG1vdG9yY29tbSx5dDg4MjRgIGRldmljZS4gT2theSwgc3RhbmRhcmQgc3R1ZmYgZm9yIGRldmljZSBkaXNjb3ZlcnkuCjIuICAqKktjb25maWcgdXBkYXRlOioqICBFbmFibGluZyBzdXBwb3J0IGZvciB0aGUgWVQ4ODI0IFBIWSB3aXRoaW4gdGhlIGBQSFlfUEFDS0FHRWAgZnJhbWV3b3JrLiBUaGlzIHN1Z2dlc3RzIGEgbW9kdWxhciBkZXNpZ24sIHdoaWNoIGlzIGdvb2QuCjMuICAqKkNvcmUgZHJpdmVyIGltcGxlbWVudGF0aW9uOioqIFRoZSBtZWF0IG9mIHRoZSBwYXRjaDogYSBuZXcgYG1vdG9yY29tbS5jYCBkcml2ZXIgd2l0aCBhIHRvbiBvZiBuZXcgZnVuY3Rpb25zLCBpbmNsdWRpbmcgc3BlY2lmaWMgcmVhZC93cml0ZSBvcGVyYXRpb25zIChwYWdlZCBhbmQgdW5wYWdlZCksIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uLCBwb3dlciBtYW5hZ2VtZW50LCBhdXRvLW5lZ290aWF0aW9uLCBhbmQgc3RhdHVzIHJlYWQgZnVuY3Rpb25zLiAgVGhleSBzZWVtIHF1aXRlIGxvdyBsZXZlbC4gVGhlcmUmIzM5O3MgYWxzbyBhIG1vZGlmaWNhdGlvbiB0byBgeXRwaHlfc2V0X3dvbGAgd2l0aCBhIGNyaXRpY2FsIGNoZWNrIGFkZGVkLCB3aGljaCBpcyBnb29kOiBlbnN1cmVzIHRoYXQgYSBmYWlsdXJlIGluIHRoZSBtb2RpZmljYXRpb24gZnVuY3Rpb24gY29ycmVjdGx5IHJldHVybnMgdGhlIGVycm9yLgo0LiAgKipwaHktYzQ1LmMgdXBkYXRlOioqIEFkZGl0aW9uIG9mIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCwgd2hpY2ggc3VnZ2VzdHMgc29tZSBnZW5lcmljIHRlc3QgbW9kZSBmdW5jdGlvbmFsaXR5LCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmb3IgZmF1bHQgaW5qZWN0aW9uLgo1LiAgKipIZWFkZXIgdXBkYXRlczoqKiBGdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBtYWNyb3MgYWRkZWQgaW4gYHBoeS5oYCBhbmQgYG1kaW8uaGAuIFN0YW5kYXJkIHN0dWZmLCBuZWNlc3NhcnkgZm9yIHRoZSBuZXcgZHJpdmVyLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogKnJlYWNoYWJpbGl0eSouIENhbiB3ZSBhY3R1YWxseSAqaGl0KiB0aGlzIGNvZGUgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50PyAgU3BlY2lmaWNhbGx5LCB0aGUgTW90b3Jjb21tIFlUODgyNCBpcyBhIFBIWSwgYSBwaHlzaWNhbCBsYXllciBkZXZpY2UuIFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyB0aGUgODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci4gVGhpcyBtZWFucyBpdCBpbnRlcmFjdHMgd2l0aCBhbiBFdGhlcm5ldCBQSFkgb24gYSBNRElPIGJ1cyBvciBkZXZpY2UgdHJlZS4gIFRoZSBxdWVzdGlvbiBpcyBjYW4gd2UgaW5zdGFudGlhdGUgdGhlc2U/IENhbiB3ZSBlbXVsYXRlIHRoaXMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IGxpa2UgU3l6a2FsbGVyIG9yIFFFTVUgd2l0aG91dCBuZWVkaW5nIGFjdHVhbCBoYXJkd2FyZT8KCkkgbmVlZCB0byBkaWcgZGVlcGVyLiBIb3cgZG9lcyB0aGUga2VybmVsIHByb2JlIGZvciB0aGVzZSBQSFkgZGV2aWNlcz8gIEFyZSB0aGVyZSB2aXJ0dWFsIG9yIG1vY2sgTURJTyBidXMgaW1wbGVtZW50YXRpb25zIHdlIGNvdWxkIGxldmVyYWdlPyBDYW4gd2UgY3JlYXRlIGFuIE1ESU8gYnVzIG9yIFBIWSBkZXZpY2UgdmlhIG5ldGxpbmssIGEgdmlydHVhbCBidXMsIG9yIGV2ZW4gVVNCPyAgVGhlIGtleSBpcyB0byBmaWd1cmUgb3V0IGlmIHdlIGNhbiAqbW9jayogdGhlIGV4aXN0ZW5jZSBvZiB0aGlzIGhhcmR3YXJlIG9yLCBmYWlsaW5nIHRoYXQsIGlmIFN5emthbGxlciBvZmZlcnMgYW55IHN1cHBvcnQgZm9yIGludGVyYWN0aW5nIHdpdGggUEhZIG9yIE1ESU8gZGV2aWNlcy4gSSBuZWVkIHRvIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSBhbmQgU3l6a2FsbGVyIGRvY3VtZW50YXRpb24gdG8gZGV0ZXJtaW5lIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jPTkzMT1zdGF0aWMgaW50IHhnYmVfcGh5X2ZpbmRfcGh5X2RldmljZShzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05NzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjk3NjpcdHJldCA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTc3LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzo5Nzg6XHRcdG5ldGRldl9lcnIocGRhdGEtXHUwMDNlbmV0ZGV2LCBcJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTk3OS1cdFx0cGh5X2RldmljZV9mcmVlKHBoeWRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYz03MTY9aG5zX21hY19yZWdpc3Rlcl9waHlkZXYoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBobnNfbWFjX2NiICptYWNfY2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYy03NDQtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmM6NzQ1Olx0cmMgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jLTc0Ni1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYz0xOTI5PXN0YXRpYyBpbnQgbmV0c2VjX3JlZ2lzdGVyX21kaW8oc3RydWN0IG5ldHNlY19wcml2ICpwcml2LCB1MzIgcGh5X2FkZHIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jLTE5ODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6MTk4NDpcdFx0cmV0ID0gcGh5X2RldmljZV9yZWdpc3Rlcihwcml2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmMtMTk4NS1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYy0xOTg4LVx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6MTk4OTpcdFx0XHRcdFwmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXIgZXJyKCVkKVxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYy0xOTkwLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTQyPWZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy02OS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzo3MDppbnQgZndub2RlX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy03MS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMDMtXHQgKi9cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMDQ6XHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMDUtXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTE0LX1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMTU6RVhQT1JUX1NZTUJPTChmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTYtXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM9MTE3PWludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTQ5LVx0XHQvKiBBbGwgZGF0YSBpcyBub3cgc3RvcmVkIGluIHRoZSBwaHkgc3RydWN0LCBzbyByZWdpc3RlciBpdCAqL1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1MDpcdFx0cmMgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTUxLVx0XHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTU2LVx0fSBlbHNlIGlmIChpc19vZl9ub2RlKGNoaWxkKSkge1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1NzpcdFx0cmMgPSBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKGJ1cywgcGh5LCBjaGlsZCwgYWRkcik7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTU4LVx0XHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmM9MjYzPXN0cnVjdCBwaHlfZGV2aWNlICp4Z2VuZV9lbmV0X3BoeV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmMtMjcwLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmM6MjcxOlx0aWYgKHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5X2RldikpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8teGdlbmUuYy0yNzItXHRcdHBoeV9kZXZpY2VfZnJlZShwaHlfZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz0zMj1zdGF0aWMgaW50IG9mX2dldF9waHlfaWQoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIHUzMiAqcGh5X2lkKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTM2LVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6Mzc6aW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTM4LVx0XHRcdFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwgdTMyIGFkZHIpXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0zOS17XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzo0MDpcdHJldHVybiBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKG1kaW8sIHBoeSxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQxLVx0XHRcdFx0XHRcdCAgb2ZfZndub2RlX2hhbmRsZShjaGlsZCksXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDMtfVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NDQ6RVhQT1JUX1NZTUJPTChvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTEzMT1zdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE2Mi1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNjM6XHRyZXQgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTY0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTQwOD1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDM3LVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDM4Olx0ZXJyID0gcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDM5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTU1MT1zdGF0aWMgdm9pZCB0amExMTAyX3AxX3JlZ2lzdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTctXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1OTg6XHRcdHJldCA9IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihidXMsIHBoeSwgY2hpbGQsIGFkZHIpO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTk5LVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTAzPUVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwNS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwNjogKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDctICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDk6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExMC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQxLX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0MjpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0OC0gKiBUaGlzIGRvZXNuJiMzOTt0IGZyZWUgdGhlIHBoeV9kZXZpY2UgaXRzZWxmLCBpdCBtZXJlbHkgcmV2ZXJzZXMgdGhlIGVmZmVjdHNcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0OTogKiBvZiBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkuIFVzZSBwaHlfZGV2aWNlX2ZyZWUoKSB0byBmcmVlIHRoZSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE1MC0gKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIxMDU9c3RhdGljIGludCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMTIwLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIxMjE6XHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjEyMi1cdGlmIChlcnIpIHtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMTIzLVx0XHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMTI0Olx0XHRkZXZfZXJyKHNmcC1cdTAwM2VkZXYsIFwmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcXG5cJiMzNDssXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjEyNS1cdFx0XHRFUlJfUFRSKGVycikpO1xuLS1cbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfRldOT0RFX01ESU8pXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmg6MTI6aW50IGZ3bm9kZV9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmgtMTMtXHRcdFx0XHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbi0tXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmg9MTY9aW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuLS1cbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xOS0jZWxzZSAvKiBDT05GSUdfRldOT0RFX01ESU8gKi9cbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaDoyMDppbnQgZndub2RlX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0yMS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oPTQ5PWJvb2wgb2ZfcGh5X2lzX2ZpeGVkX2xpbmsoc3RydWN0IGRldmljZV9ub2RlICpucCk7XG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaDo1MDppbnQgb2ZfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmgtNTEtXHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcik7XG4tLVxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmg9MTQwPXN0YXRpYyBpbmxpbmUgYm9vbCBvZl9waHlfaXNfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oLTE0NC1cbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oOjE0NTpzdGF0aWMgaW5saW5lIGludCBvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC0xNDYtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmluY2x1ZGUvbGludXgvcGh5Lmg9MjE3Nz1zdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KTtcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjE3ODppbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcbmluY2x1ZGUvbGludXgvcGh5LmgtMjE3OS12b2lkIHBoeV9kZXZpY2VfZnJlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDYyMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IFBIWSBEcml2ZXIgTWF0Y2hpbmcgYW5kIFByb2JpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBhIFBIWSBkcml2ZXIsIHNwZWNpZmljYWxseSBvbmUgZGVzaWduZWQgZm9yIHNvbWV0aGluZyBsaWtlIGEgTW90b3Jjb21tIFlUODgyNCwgYWN0dWFsbHkgZ2V0cyBtYXRjaGVkIGFuZCBwcm9iZWQgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmdW5kYW1lbnRhbCBmbG93LiBSaWdodCwgbG9va2luZyBhdCBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AsIHRoZSBrZXkgZnVuY3Rpb25zIGFyZSBgcGh5X2J1c19tYXRjaGAgYW5kIGBwaHlfcHJvYmVgLiBOb3csIGZvciBkcml2ZXJzIGxpa2UgdGhlIGBtb3RvcmNvbW1fcGh5X2RydnNgLCBteSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIG1hdGNoaW5nIHByb2Nlc3MgcmVsaWVzIG9uIGlkZW50aWZ5aW5nIHRoZSBQSFkgYmFzZWQgb24gaXRzIGBwaHlfaWRgLiBTcGVjaWZpY2FsbHksIGl0IHVzZXMgc29tZXRoaW5nIGxpa2UgYFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KWAuIFRoYXQmIzM5O3MgdGhlIGRyaXZlciYjMzk7cyB1bmlxdWUgaWRlbnRpZmllci4KCkJ1dCBoZXJlJiMzOTtzIHdoZXJlIEkgbmVlZCB0byBjbGFyaWZ5IHRoaW5ncy4gV2hlcmUgZXhhY3RseSBkb2VzIHRoaXMgYHBoeWRldmAgc3RydWN0dXJlIG9yaWdpbmF0ZSBmcm9tPyBJIGJlbGlldmUgaXQmIzM5O3MgZWl0aGVyIHRocm91Z2ggYW4gTURJTyBidXMgc2Nhbm5pbmcgcHJvY2Vzcywgb3IgcG90ZW50aWFsbHkgZnJvbSBhIGRldmljZSB0cmVlIHJlZ2lzdHJhdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4KCk5vdywgbXkgcmVhbCBxdWVzdGlvbiBpcyByZWdhcmRpbmcgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQuIERvZXMgUUVNVSwgb3IgZXZlbiB0aGUgZHJlYWRlZCBzeXprYWxsZXIsIHByb3ZpZGUgYSByZWFsaXN0aWMgc2NlbmFyaW8gd2l0aCBhbiBNRElPIGJ1cyBvciwgbW9yZSBzcGVjaWZpY2FsbHksIGFuIGFjdHVhbCBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBjaGlwIHRoYXQgSSBjYW4gaW50ZXJhY3Qgd2l0aD8gSXQmIzM5O3MgYSBsb25nIHNob3QsIGJ1dCBtYXliZS4uLiBXYWl0IGEgbWludXRlLi4uIENvdWxkIFVTQiBuZXQgb3IgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIHBvdGVudGlhbGx5IGV4cG9zZSBvciB1dGlsaXplIE1ESU8gYnVzZXM/IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gSXQmIzM5O3MgYSBsb25nIHNob3QsIGJ1dCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYW55IHBvdGVudGlhbCBVU0IgZGV2aWNlcyB0aGF0IG1pZ2h0IHV0aWxpemUgcGh5bGliIG9yIGFuIE1ESU8gYnVzLiBJIHNob3VsZCBsb29rIGludG8gdGhvc2UgZHJpdmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9idXNfcmVnaXN0ZXIuKnVzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExODgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbCBpbiB0aGUgZmllbGQsIHNwZWFraW5nIGRpcmVjdGx5IHRvIGFub3RoZXIgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBVU0IgTmV0d29yayBEcml2ZXIgTGFuZHNjYXBlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGRyaXZlcnMvbmV0L3VzYiBhcmVhLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG5ldHdvcmsgYXNwZWN0IHRoYXQgdXRpbGl6ZXMgVVNCIGNvbm5lY3Rpb25zLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRvIHBpbnBvaW50IGFueSBwb3RlbnRpYWwgdHJvdWJsZSBzcG90cyBvciBhcmVhcyByaXBlIGZvciBvcHRpbWl6YXRpb24gd2l0aGluIHRoaXMgc3BlY2lmaWMgcGFydCBvZiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiwgbWFraW5nIHN1cmUgaXQgYWxpZ25zIHdpdGggdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIG5ldHdvcmsgZGF0YSBleGNoYW5nZSBhbmQgZGF0YSB0cmFuc2Zlci4gQW55IGlycmVndWxhcml0aWVzIGhlcmU/IENvbXBhdGliaWxpdHkgaXNzdWVzPyBMZXTigJlzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGVmZmljaWVudCByZXNvdXJjZSBtYW5hZ2VtZW50LCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIG9yIHJhY2UgY29uZGl0aW9ucy4gS25vd2luZyB0aGUgYXJjaGl0ZWN0dXJlIG9mIG5ldHdvcmsgZGF0YSBtYW5hZ2VtZW50IGluc2lkZSBhIFVTQiBjb25uZWN0aW9uIGlzIG15IHByaW9yaXR5LiBMZXQmIzM5O3Mgc3RhcnQgdGhlIGV2YWx1YXRpb24gbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9kZXZpY2V8bWRpb2J1cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXNpeC5oPTE3OD1zdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0xODUtXHRzdHJ1Y3QgbWlpX2J1cyAqbWRpbztcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTg2Olx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTg3Olx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9pbnQ7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE4OC1cdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz02Njk9c3RhdGljIGludCBheDg4NzcyX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY3My1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2NzQ6XHRwcml2LVx1MDAzZW1kaW8gPSBtZGlvYnVzX2FsbG9jKCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjc1LVx0aWYgKCFwcml2LVx1MDAzZW1kaW8pXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4Ni1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2ODc6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg4LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OS1cdFx0bmV0ZGV2X2VycihkZXYtXHUwMDNlbmV0LCBcJiMzNDtDb3VsZCBub3QgcmVnaXN0ZXIgTURJTyBidXMgKGVyciAlZClcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NjkwOlx0XHRtZGlvYnVzX2ZyZWUocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02OTEtXHRcdHByaXYtXHUwMDNlbWRpbyA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTY5Nz1zdGF0aWMgdm9pZCBheDg4NzcyX21kaW9fdW5yZWdpc3RlcihzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdilcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02OTgte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY5OTpcdG1kaW9idXNfdW5yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjcwMDpcdG1kaW9idXNfZnJlZShwcml2LVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcwMS19XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTcwMz1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9waHkoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MDctXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzA4Olx0cHJpdi1cdTAwM2VwaHlkZXYgPSBtZGlvYnVzX2dldF9waHkocHJpdi1cdTAwM2VtZGlvLCBwcml2LVx1MDAzZXBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MDktXHRpZiAoIXByaXYtXHUwMDNlcGh5ZGV2KSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTczMS1cdCAqL1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjczMjpcdHByaXYtXHUwMDNlcGh5ZGV2X2ludCA9IG1kaW9idXNfZ2V0X3BoeShwcml2LVx1MDAzZW1kaW8sIEFYX0VNQkRfUEhZX0FERFIpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTczMy1cdGlmICghcHJpdi1cdTAwM2VwaHlkZXZfaW50KSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTc2Mj1zdGF0aWMgdm9pZCBheDg4NzcyX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjc2MzpcdFx0XHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03NjQtXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTE4PXN0cnVjdCBheDg4MTcyYV9wcml2YXRlIHtcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTE5LVx0c3RydWN0IG1paV9idXMgKm1kaW87XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzoyMDpcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yMS1cdGNoYXIgcGh5X25hbWVbUEhZX0lEX1NJWkVdO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTI5PXN0YXRpYyB2b2lkIGF4ODgxNzJhX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zMC17XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzozMTpcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBuZXRkZXYtXHUwMDNlcGh5ZGV2O1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzItXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTYxPXN0YXRpYyBpbnQgYXg4ODE3MmFfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy02NS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjY2Olx0cHJpdi1cdTAwM2VtZGlvID0gbWRpb2J1c19hbGxvYygpO1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtNjctXHRpZiAoIXByaXYtXHUwMDNlbWRpbykge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc5LVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6ODA6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy04MS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy04OS1tZnJlZTpcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjkwOlx0bWRpb2J1c19mcmVlKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy05MS1cdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9OTQ9c3RhdGljIHZvaWQgYXg4ODE3MmFfcmVtb3ZlX21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTk4LVx0bmV0ZGV2X2luZm8oZGV2LVx1MDAzZW5ldCwgXCYjMzQ7ZGVyZWdpc3RlcmluZyBtZGlvIGJ1cyAlc1xcblwmIzM0OywgcHJpdi1cdTAwM2VtZGlvLVx1MDAzZWlkKTtcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjk5Olx0bWRpb2J1c191bnJlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzoxMDA6XHRtZGlvYnVzX2ZyZWUocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTEwMS19XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz00MTM9c3RydWN0IGxhbjc4eHhfbmV0IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ0MS1cdHN0cnVjdCBtdXRleFx0XHRkZXZfbXV0ZXg7IC8qIHNlcmlhbGlzZSBvcGVuL3N0b3Agd3J0IHN1c3BlbmQvcmVzdW1lICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjQ0MjpcdHN0cnVjdCBtdXRleFx0XHRtZGlvYnVzX211dGV4OyAvKiBmb3IgTURJTyBidXMgYWNjZXNzICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ0My1cdHVuc2lnbmVkIGludFx0XHRwaXBlX2luLCBwaXBlX291dCwgcGlwZV9pbnRyO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtNDU4LVx0dTMyXHRcdFx0Y2hpcHJldjtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6NDU5Olx0c3RydWN0IG1paV9idXNcdFx0Km1kaW9idXM7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ2MC1cdHBoeV9pbnRlcmZhY2VfdFx0XHRpbnRlcmZhY2U7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz05NDY9c3RhdGljIGludCBsYW43OHh4X2ZsdXNoX3J4X2ZpZm8oc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy05NTAtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjk1MTovKiBMb29wIHVudGlsIHRoZSByZWFkIGlzIGNvbXBsZXRlZCB3aXRoIHRpbWVvdXQgY2FsbGVkIHdpdGggbWRpb2J1c19tdXRleCBoZWxkICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjk1MjpzdGF0aWMgaW50IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy05NTMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MTU4Mj1zdGF0aWMgaW50IGxhbjc4eHhfbWFjX3Jlc2V0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU4Ny1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MTU4ODpcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNTg5LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU5My1cdCAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoxNTk0Olx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU5NS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNjIyLWV4aXRfdW5sb2NrOlxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoxNjIzOlx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VtZGlvYnVzX211dGV4KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTYyNC1cbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTE5NDQ9c3RhdGljIGludCBsYW43OHh4X2luaXRfbWFjX2FkZHJlc3Moc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDExLS8qIE1ESU8gcmVhZCBhbmQgd3JpdGUgd3JhcHBlcnMgZm9yIHBoeWxpYiAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDEyOnN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeClcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAxMy17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDIxLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDIyOlx0bXV0ZXhfbG9jayhcdTAwMjZkZXYtXHUwMDNlbWRpb2J1c19tdXRleCk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMjMtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMjQtXHQvKiBjb25maXJtIE1JSSBub3QgYnVzeSAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDI1Olx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAyNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDM0LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDM1Olx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAzNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDQ1LWRvbmU6XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwNDY6XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDQ3LVx0dXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi1cdTAwM2VpbnRmKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNTEtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwNTI6c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeCxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA1My1cdFx0XHRcdCB1MTYgcmVndmFsKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA2Mi1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA2MzpcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDY0LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDY1LVx0LyogY29uZmlybSBNSUkgbm90IGJ1c3kgKi9cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA2NjpcdHJldCA9IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KGRldik7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNjctXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4MC1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA4MTpcdHJldCA9IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KGRldik7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwODItXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4NS1kb25lOlxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDg2Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VtZGlvYnVzX211dGV4KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4Ny1cdHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtXHUwMDNlaW50Zik7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yMDkxPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvX2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDk1LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDk2Olx0ZGV2LVx1MDAzZW1kaW9idXMgPSBtZGlvYnVzX2FsbG9jKCk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwOTc6XHRpZiAoIWRldi1cdTAwM2VtZGlvYnVzKSB7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwOTgtXHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7Y2FuJiMzOTt0IGFsbG9jYXRlIE1ESU8gYnVzXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMDEtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDI6XHRkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2Vwcml2ID0gKHZvaWQgKilkZXY7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDM6XHRkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2VyZWFkID0gbGFuNzh4eF9tZGlvYnVzX3JlYWQ7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDQ6XHRkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2V3cml0ZSA9IGxhbjc4eHhfbWRpb2J1c193cml0ZTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwNTpcdGRldi1cdTAwM2VtZGlvYnVzLVx1MDAzZW5hbWUgPSBcJiMzNDtsYW43OHh4LW1kaW9idXNcJiMzNDs7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDY6XHRkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2VwYXJlbnQgPSBcdTAwMjZkZXYtXHUwMDNldWRldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMDctXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDg6XHRzbnByaW50ZihkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDt1c2ItJTAzZDolMDNkXCYjMzQ7LFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTA5LVx0XHQgZGV2LVx1MDAzZXVkZXYtXHUwMDNlYnVzLVx1MDAzZWJ1c251bSwgZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2bnVtKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMTQtXHRcdC8qIHNldCB0byBpbnRlcm5hbCBQSFkgaWQgKi9cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjExNTpcdFx0ZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNlcGh5X21hc2sgPSB+KDEgXHUwMDNjXHUwMDNjIDEpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTE2LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjEtXHRub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwmIzM0O21kaW9cJiMzNDspO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTIyOlx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYtXHUwMDNlbWRpb2J1cywgbm9kZSk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjMtXHRvZl9ub2RlX3B1dChub2RlKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjgtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMjk6XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O3JlZ2lzdGVyZWQgbWRpb2J1cyBidXMgJXNcXG5cJiMzNDssIGRldi1cdTAwM2VtZGlvYnVzLVx1MDAzZWlkKTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEzMC1cdHJldHVybiAwO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTMxLWV4aXQxOlxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTMyOlx0bWRpb2J1c19mcmVlKGRldi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEzMy1cdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yMTM2PXN0YXRpYyB2b2lkIGxhbjc4eHhfcmVtb3ZlX21kaW8oc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMzcte1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTM4Olx0bWRpb2J1c191bnJlZ2lzdGVyKGRldi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEzOTpcdG1kaW9idXNfZnJlZShkZXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxNDAtfVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjQ3Nz1zdGF0aWMgdm9pZCBsYW43OHh4X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyNDc4Olx0XHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjQ3OS1cdFx0XHRcdHVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjYyNj1zdGF0aWMgaW50IGxhbjc4eHhfc2V0X2ZpeGVkX2xpbmsoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yNjQ4LSAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyNjQ5OnN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbGFuNzh4eF9nZXRfcGh5KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yNjUwLXtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjY1MTpcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI2NTItXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI2NTMtXHQvKiBBdHRlbXB0IHRvIGxvY2F0ZSBhIFBIWSBvbiB0aGUgTURJTyBidXMgKi9cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjY1NDpcdHBoeWRldiA9IHBoeV9maW5kX2ZpcnN0KGRldi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjY1NS1cbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTI3Njk9c3RhdGljIGludCBsYW43OHh4X2NvbmZpZ3VyZV9sZWRzX2Zyb21fZHQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYsXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjI3NzA6XHRcdFx0XHRcdCAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjc3MS17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yODU4PXN0YXRpYyBpbnQgbGFuNzh4eF9waHlfaW5pdChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjg1OS17XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjI4NjA6XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yODYxLVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI5MDQtXHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7Y2FuJiMzOTt0IGF0dGFjaCBQSFkgdG8gJXMsIGVycm9yICVwZVxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjkwNTpcdFx0XHQgICBkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2VpZCwgRVJSX1BUUihyZXQpKTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjkwNi1cdFx0Z290byBwaHlsaW5rX3VuaW5pdDtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTQ2NTU9c3RhdGljIGludCBsYW43OHh4X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtNDY4OC1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4cV9vdmVyZmxvdyk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjQ2ODk6XHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2VtZGlvYnVzX211dGV4KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtNDY5MC1cdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZWRldl9tdXRleCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9NjA9c3RydWN0IHNtc2M5NXh4X3ByaXYge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTc0LVx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmlycWZ3bm9kZTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjc1Olx0c3RydWN0IG1paV9idXMgKm1kaW9idXM7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzo3NjpcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy03Ny1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqcG1fdGFzaztcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0yMTg9c3RhdGljIHZvaWQgc21zYzk1eHhfbWRpb193cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBwaHlfaWQsIGludCBpZHgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMjU5LVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MjYwOnN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMjYxLXtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0yOTYtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoyOTc6c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeClcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTI5OC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMzAzLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MzA0OnN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4LFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMzA1LVx0XHRcdFx0ICB1MTYgcmVndmFsKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTc5OD1zdGF0aWMgaW50IHNtc2M5NXh4X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTgwMi1cdHN0cnVjdCBzbXNjOTV4eF9wcml2ICpwZGF0YTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjgwMzpcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy04MDQtXHRzdHJ1Y3QgdXNibmV0ICpkZXY7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjE3LVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTIxODpcdHBkYXRhLVx1MDAzZW1kaW9idXMgPSBtZGlvYnVzX2FsbG9jKCk7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjE5Olx0aWYgKCFwZGF0YS1cdTAwM2VtZGlvYnVzKSB7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjIwLVx0XHRyZXQgPSAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyMjktXHRpZiAocGRhdGEtXHUwMDNlaXNfaW50ZXJuYWxfcGh5KVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTIzMDpcdFx0cGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2VwaHlfbWFzayA9IH4oMXUgXHUwMDNjXHUwMDNjIFNNU0M5NVhYX0lOVEVSTkFMX1BIWV9JRCk7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjMxLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTIzMjpcdHBkYXRhLVx1MDAzZW1kaW9idXMtXHUwMDNlcHJpdiA9IGRldjtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzM6XHRwZGF0YS1cdTAwM2VtZGlvYnVzLVx1MDAzZXJlYWQgPSBzbXNjOTV4eF9tZGlvYnVzX3JlYWQ7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjM0Olx0cGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2V3cml0ZSA9IHNtc2M5NXh4X21kaW9idXNfd3JpdGU7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjM1Olx0cGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2VyZXNldCA9IHNtc2M5NXh4X21kaW9idXNfcmVzZXQ7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjM2Olx0cGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2VuYW1lID0gXCYjMzQ7c21zYzk1eHgtbWRpb2J1c1wmIzM0OztcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzc6XHRwZGF0YS1cdTAwM2VtZGlvYnVzLVx1MDAzZXBhcmVudCA9IFx1MDAyNmRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldjtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyMzgtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjM5Olx0c25wcmludGYocGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2VpZCwgQVJSQVlfU0laRShwZGF0YS1cdTAwM2VtZGlvYnVzLVx1MDAzZWlkKSxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDAtXHRcdCBcJiMzNDt1c2ItJTAzZDolMDNkXCYjMzQ7LCBkZXYtXHUwMDNldWRldi1cdTAwM2VidXMtXHUwMDNlYnVzbnVtLCBkZXYtXHUwMDNldWRldi1cdTAwM2VkZXZudW0pO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0MS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyNDI6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0My1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjQ3LVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI0ODpcdHBkYXRhLVx1MDAzZXBoeWRldiA9IHBoeV9maW5kX2ZpcnN0KHBkYXRhLVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0OS1cdGlmICghcGRhdGEtXHUwMDNlcGh5ZGV2KSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI4OC1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyODk6XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7Y2FuJiMzOTt0IGF0dGFjaCBQSFkgdG8gJXNcXG5cJiMzNDssIHBkYXRhLVx1MDAzZW1kaW9idXMtXHUwMDNlaWQpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI5MC1cdFx0Z290byB1bnJlZ2lzdGVyX21kaW87XG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI5Ny11bnJlZ2lzdGVyX21kaW86XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjk4Olx0bWRpb2J1c191bnJlZ2lzdGVyKHBkYXRhLVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI5OS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEzMDAtZnJlZV9tZGlvOlxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTMwMTpcdG1kaW9idXNfZnJlZShwZGF0YS1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEzMDItXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTMxNz1zdGF0aWMgdm9pZCBzbXNjOTV4eF91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMzIxLVx0cGh5X2Rpc2Nvbm5lY3QoZGV2LVx1MDAzZW5ldC1cdTAwM2VwaHlkZXYpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTMyMjpcdG1kaW9idXNfdW5yZWdpc3RlcihwZGF0YS1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEzMjM6XHRtZGlvYnVzX2ZyZWUocGRhdGEtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMzI0LVx0aXJxX2Rpc3Bvc2VfbWFwcGluZyhpcnFfZmluZF9tYXBwaW5nKHBkYXRhLVx1MDAzZWlycWRvbWFpbiwgUEhZX0hXSVJRKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyNjgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBJbnF1aXJ5OiBVU0IgR2FkZ2V0IEVtdWxhdGlvbiBhbmQgUEhZIElkZW50aWZpY2F0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIEkgbmVlZCB0byByZS1ldmFsdWF0ZSBzb21ldGhpbmcgcmVnYXJkaW5nIFVTQiBnYWRnZXQgZW11bGF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIHRoZSBgcmF3X2dhZGdldGAgZHJpdmVyIGNhbiBlZmZlY3RpdmVseSBlbXVsYXRlIGEgVVNCLXRvLUV0aGVybmV0IGFkYXB0ZXIgbGlrZSBhbiBBU0lYIEFYODgxNzJBLCBTTVNDOTV4eCwgb3IgZXZlbiBhbiBBU0lYLWJhc2VkIGRldmljZSBsaWtlIHRoZSBMQU43OHh4LgoKSWYgc28sIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gSWYgSSYjMzk7bSBzdWNjZXNzZnVsbHkgZW11bGF0aW5nIG9uZSBvZiB0aGVzZSB2aWEgYHJhd19nYWRnZXRgIGFuZCB1c2luZyB0aGUgYGR1bW15X2hjZGAsIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBNRElPIGJ1cyBjb21lcyBpbnRvIHBsYXk/IFJpZ2h0LCB0aGUgZGV2aWNlIHJlZ2lzdGVycyBhbiBNRElPIGJ1cyB3aXRoIGBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtJmd0O21kaW8pYC4KCkkgaGF2ZSB0byBkaXZlIGRlZXBlciBpbnRvIGBtZGlvYnVzX3JlZ2lzdGVyYCwgZXNwZWNpYWxseSB0aGUgYG1kaW9idXNfc2NhbmAgZnVuY3Rpb24uIEFzIEkgcmVjYWxsLCB0aGlzIGlzIHdoZXJlIHRoZSBzeXN0ZW0gdHJpZXMgdG8gZGV0ZXJtaW5lIHdoYXQmIzM5O3Mgb24gdGhlIE1ESU8gYnVzIGJ5IHJlYWRpbmcgYE1JSV9QSFlTSUQxYCBhbmQgYE1JSV9QSFlTSUQyYCB1c2luZyB0aGUgYGJ1cy0mZ3Q7cmVhZCgpYCBmdW5jdGlvbi4gVGhpcyBnZXRzIG1lIHRoaW5raW5nLi4uCgpOb3csIGhlcmUmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gV2hhdCBpZiB0aGUgZW11bGF0ZWQgVVNCIGRldmljZSAqcmVzcG9uZHMqIHdpdGggYXJiaXRyYXJ5IHZhbHVlcyBkdXJpbmcgdGhlIGBtZGlvYnVzX3NjYW5gPyBMZXQmIzM5O3Mgc2F5LCBpdCByZXR1cm5zIGEgUEhZIElELCBsaWtlIHRoZSBvbmUgZm9yIGEgWVQ4ODI0LCB3aGljaCBpcyBgUEhZX0lEX1lUODgyNGAgKDB4NGY1MWU4YjgpLiBJcyB0aGF0IHBvc3NpYmxlPyBJdCBzaG91bGQgYmUhCgpXYWl0IGEgbWludXRlLCBsZXQgbWUgcHVsbCB1cCB0aGUgY29kZSBmb3IgYHl0ODgyNF9wcm9iZWAhCgpgYGBjCnN0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCnsKCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKCXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2OwoJaW50IHJldDsKCglyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTsKCWlmIChyZXQpCgkJcmV0dXJuIHJldDsKCglpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7CgkJcmV0ID0geXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UocGh5ZGV2KTsKCQlpZiAocmV0KQoJCQlyZXR1cm4gcmV0OwoJfQoKCXJldHVybiAwOwp9CmBgYAoKT2theSwgdGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCB0aGF0IGxpbmUgYGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO2AuIFRoaXMgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gIGlzIGRvaW5nLiBUaGlzIHNlZW1zIHRvIGJlIHRoZSBrZXkgc3RlcCBpbiBoYW5kbGluZyB0aGUgUEhZIGFzc29jaWF0aW9uLiBGcm9tIGhlcmUgSSBuZWVkIHRvIGxvb2sgYXQgd2hhdCBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCBkb2VzIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgUEhZIElELCBhbmQgdGhlbiBob3cgdGhhdCBpbXBhY3RzIHRoZSBlbnRpcmUgZW11bGF0ZWQgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTQ2Mzg9c3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDY0My1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo0NjQ0Olx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDY0NS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM9NDA1PUVYUE9SVF9TWU1CT0xfR1BMKGRldm1fcGh5X3BhY2thZ2Vfam9pbik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDA3LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM6NDA4OiAqIGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbiAtIHJlc291cmNlIG1hbmFnZWQgb2ZfcGh5X3BhY2thZ2Vfam9pbigpXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy00MDktICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhpcyBQSFkgcGFja2FnZVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTQxNi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jOjQxNzppbnQgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTQxOC1cdFx0XHQgICAgIHNpemVfdCBwcml2X3NpemUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDM4LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jOjQzOTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4pO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDQwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaD0zMj1pbnQgZGV2bV9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaC0zMy1cdFx0XHQgIGludCBiYXNlX2FkZHIsIHNpemVfdCBwcml2X3NpemUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oOjM0OmludCBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oLTM1LVx0XHRcdCAgICAgc2l6ZV90IHByaXZfc2l6ZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTY5ND1zdGF0aWMgaW50IHFjYTgwN3hfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNzAxLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjcwMjpcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO1xuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTcwMy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYz0xOTU9c3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMtMjM1LVxuZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYzoyMzY6XHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xuZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYy0yMzctXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDE3MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBncmFiIHRoYXQgYGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbmAgZnVuY3Rpb24gZnJvbSBgZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmNgIHVzaW5nIHRoZSByZWFkLWZpbGUgY29tbWFuZC4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZXZpY2UtbWFuYWdlZCBQSFkgcGFja2FnZSBqb2luaW5nIHByb2Nlc3Mgd29ya3MuIEkgd2FudCB0byBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBhc3NvY2lhdGluZyBQSFlzIHdpdGggdGhlIHJlbGV2YW50IGRldmljZXMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IG1hbmFnZXMgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHdoZW4gUEhZIHBhY2thZ2VzIGFyZSBpbnRlZ3JhdGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwNTpcdEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fcGh5X3BhY2thZ2Vfam9pbik7XG4gNDA2Olx0XG4gNDA3Olx0LyoqXG4gNDA4Olx0ICogZGV2bV9vZl9waHlfcGFja2FnZV9qb2luIC0gcmVzb3VyY2UgbWFuYWdlZCBvZl9waHlfcGFja2FnZV9qb2luKClcbiA0MDk6XHQgKiBAZGV2OiBkZXZpY2UgdGhhdCBpcyByZWdpc3RlcmluZyB0aGlzIFBIWSBwYWNrYWdlXG4gNDEwOlx0ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4gNDExOlx0ICogQHByaXZfc2l6ZTogaWYgbm9uLXplcm8gYWxsb2NhdGUgdGhpcyBhbW91bnQgb2YgYnl0ZXMgZm9yIHByaXZhdGUgZGF0YVxuIDQxMjpcdCAqXG4gNDEzOlx0ICogTWFuYWdlZCBvZl9waHlfcGFja2FnZV9qb2luKCkuIFNoYXJlZCBzdG9yYWdlIGZldGNoZWQgYnkgdGhpcyBmdW5jdGlvbixcbiA0MTQ6XHQgKiBwaHlfcGFja2FnZV9sZWF2ZSgpIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIG9uIGRyaXZlciBkZXRhY2guIFNlZVxuIDQxNTpcdCAqIG9mX3BoeV9wYWNrYWdlX2pvaW4oKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiA0MTY6XHQgKi9cbiA0MTc6XHRpbnQgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiA0MTg6XHRcdFx0XHQgICAgIHNpemVfdCBwcml2X3NpemUpXG4gNDE5Olx0e1xuIDQyMDpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKipwdHI7XG4gNDIxOlx0XHRpbnQgcmV0O1xuIDQyMjpcdFxuIDQyMzpcdFx0cHRyID0gZGV2cmVzX2FsbG9jKGRldm1fcGh5X3BhY2thZ2VfbGVhdmUsIHNpemVvZigqcHRyKSxcbiA0MjQ6XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbiA0MjU6XHRcdGlmICghcHRyKVxuIDQyNjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA0Mjc6XHRcbiA0Mjg6XHRcdHJldCA9IG9mX3BoeV9wYWNrYWdlX2pvaW4ocGh5ZGV2LCBwcml2X3NpemUpO1xuIDQyOTpcdFxuIDQzMDpcdFx0aWYgKCFyZXQpIHtcbiA0MzE6XHRcdFx0KnB0ciA9IHBoeWRldjtcbiA0MzI6XHRcdFx0ZGV2cmVzX2FkZChkZXYsIHB0cik7XG4gNDMzOlx0XHR9IGVsc2Uge1xuIDQzNDpcdFx0XHRkZXZyZXNfZnJlZShwdHIpO1xuIDQzNTpcdFx0fVxuIDQzNjpcdFxuIDQzNzpcdFx0cmV0dXJuIHJldDtcbiA0Mzg6XHR9XG4gNDM5Olx0RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKTtcbiA0NDA6XHRcbiA0NDE6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7UEhZIHBhY2thZ2Ugc3VwcG9ydFwmIzM0Oyk7XG4gNDQyOlx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA5NjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgb2ZfcGh5X3BhY2thZ2Vfam9pbmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGBvZl9waHlfcGFja2FnZV9qb2luYCwgd2hhdCYjMzk7cyAqdGhhdCogYWJvdXQ/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBzeXN0ZW0uIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBpdCBwcm9iYWJseSByZWxhdGVzIHRvIHNvbWUgZnVuZGFtZW50YWwgYXNwZWN0IG9mIHRoZSBQSFkgbGF5ZXIsIHBlcmhhcHMgZGVhbGluZyB3aXRoIHRoZSBhZ2dyZWdhdGlvbiwgZGVhZ2dyZWdhdGlvbiwgb3IgY29vcmRpbmF0aW9uIG9mIHBoeXNpY2FsIGxheWVyIGRhdGEgdW5pdHMuIEdpdmVuIHRoZSBuYW1lLCAmIzM0O2pvaW4mIzM0OyBpcyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIHdpbGwgaW52b2x2ZSBzb21lIGZvcm0gb2YgYXNzZW1ibHkgb3IgY29tYmluaW5nIG9mIGVsZW1lbnRzLiBJcyBpdCByZWxhdGVkIHRvIGJ1cnN0IGFzc2VtYmx5LCBmcmFtZSBjb25jYXRlbmF0aW9uLCBwZXJoYXBzIHNvbWUgaGlnaGVyLWxldmVsIG11bHRpcGxleGluZyBzY2hlbWU/IFRoZSBgb2ZgIHByZWZpeCBzdWdnZXN0cyBpdCYjMzk7cyBhIHBhcnQgb2YgT3BlbkZsb3csIHNvIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgaG93IHRoaXMgZml0cyB3aXRoaW4gdGhlIE9wZW5GbG93IHByb3RvY29sJiMzOTtzIGFic3RyYWN0aW9uIG9mIHRoZSBQSFkgbGF5ZXIuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBPcGVuRmxvdyBzcGVjaWZpY2F0aW9ucyBhbmQgaG93IFBIWSBpbnRlcmFjdGlvbnMgYXJlIHR5cGljYWxseSBoYW5kbGVkIGluIHRoaXMgZW52aXJvbm1lbnQuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFdoZXJlIGRvZXMgdGhpcyBmdW5jdGlvbiBnZXQgY2FsbGVkPyBBbmQsIGNyaXRpY2FsbHksIHdoYXQgYXJlIHRoZSB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbSBkYXRhIGZsb3dzIHRoaXMgZnVuY3Rpb24gaW1wYWN0cz8gUmlnaHQsIEkgbmVlZCB0byBsb29rIGludG8gaXQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3VyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgb2ZfcGh5X3BhY2thZ2Vfam9pbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYz0yNzY9RVhQT1JUX1NZTUJPTF9HUEwocGh5X3BhY2thZ2Vfam9pbik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtMjk3LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM6Mjk4OmludCBvZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHNpemVfdCBwcml2X3NpemUpXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy0yOTkte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaD0yOT1pbnQgcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgYmFzZV9hZGRyLCBzaXplX3QgcHJpdl9zaXplKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaDozMDppbnQgb2ZfcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzaXplX3QgcHJpdl9zaXplKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaC0zMS12b2lkIHBoeV9wYWNrYWdlX2xlYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTUxMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUEhZIFBhY2thZ2UgSm9pbiBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmNgIGFuZCB6ZXJvIGluIG9uIHRoYXQgYG9mX3BoeV9wYWNrYWdlX2pvaW5gIGZ1bmN0aW9uIGFyb3VuZCBsaW5lIDI5OC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHN5c3RlbSBpcyBoYW5kbGluZyB0aGUgaW50ZWdyYXRpb24gb2YgdGhlc2UgUEhZIHBhY2thZ2VzLCBwYXJ0aWN1bGFybHkgd2l0aCB0aGUgZGV2aWNlIHRyZWUgaW50ZWdyYXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgdGhlIGNvcmUgb2YgYnJpbmdpbmcgdGhlc2UgUEhZcyBpbnRvIHRoZSBzeXN0ZW0gYWZ0ZXIgdGhleSYjMzk7dmUgYmVlbiBkZXNjcmliZWQgYnkgdGhlIGRldmljZSB0cmVlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWdpc3RyYXRpb24sIGJpbmRpbmcsIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLiBUaGlzIGxpa2VseSBoYW5kbGVzIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgUEhZIGRyaXZlciBpdHNlbGYgYW5kIHRoZSBkZXZpY2UgdHJlZSBpbmZvcm1hdGlvbi4gSSYjMzk7bSBjdXJpb3VzIGlmIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciByZXNvdXJjZSBhbGxvY2F0aW9uLCBJUlEgc2V0dXAsIG9yIHByb2JpbmcgdGhlIFBIWSYjMzk7cyBjYXBhYmlsaXRpZXMgYmFzZWQgb24gd2hhdCYjMzk7cyBkZWNsYXJlZCBpbiB0aGUgZGV2aWNlIHRyZWUgbm9kZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBleGFjdGx5IGhvdyBpdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjk1Olx0ICogbm9kZSBpcyBub3QgZGV0ZWN0ZWQgb3IgaXMgbm90IHZhbGlkIG9yIGRvZXNuJiMzOTt0IG1hdGNoIHRoZSBleHBlY3RlZCBub2RlXG4gMjk2Olx0ICogbmFtZSBmb3IgUEhZIHBhY2thZ2UuXG4gMjk3Olx0ICovXG4gMjk4Olx0aW50IG9mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc2l6ZV90IHByaXZfc2l6ZSlcbiAyOTk6XHR7XG4gMzAwOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbiAzMDE6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuIDMwMjpcdFx0dTMyIGJhc2VfYWRkcjtcbiAzMDM6XHRcdGludCByZXQ7XG4gMzA0Olx0XG4gMzA1Olx0XHRpZiAoIW5vZGUpXG4gMzA2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMwNzpcdFxuIDMwODpcdFx0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChub2RlKTtcbiAzMDk6XHRcdGlmICghcGFja2FnZV9ub2RlKVxuIDMxMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzMTE6XHRcbiAzMTI6XHRcdGlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4gMzEzOlx0XHRcdHJldCA9IC1FSU5WQUw7XG4gMzE0Olx0XHRcdGdvdG8gZXhpdDtcbiAzMTU6XHRcdH1cbiAzMTY6XHRcbiAzMTc6XHRcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2YmFzZV9hZGRyKSkge1xuIDMxODpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDMxOTpcdFx0XHRnb3RvIGV4aXQ7XG4gMzIwOlx0XHR9XG4gMzIxOlx0XG4gMzIyOlx0XHRyZXQgPSBwaHlfcGFja2FnZV9qb2luKHBoeWRldiwgYmFzZV9hZGRyLCBwcml2X3NpemUpO1xuIDMyMzpcdFx0aWYgKHJldClcbiAzMjQ6XHRcdFx0Z290byBleGl0O1xuIDMyNTpcdFxuIDMyNjpcdFx0cGh5ZGV2LVx1MDAzZXNoYXJlZC1cdTAwM2VucCA9IHBhY2thZ2Vfbm9kZTtcbiAzMjc6XHRcbiAzMjg6XHRcdHJldHVybiAwO1xuIDMyOTpcdGV4aXQ6XG4gMzMwOlx0XHRvZl9ub2RlX3B1dChwYWNrYWdlX25vZGUpO1xuIDMzMTpcdFx0cmV0dXJuIHJldDtcbiAzMzI6XHR9XG4gMzMzOlx0RVhQT1JUX1NZTUJPTF9HUEwob2ZfcGh5X3BhY2thZ2Vfam9pbik7XG4gMzM0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMzUwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG9mX3BoeV9wYWNrYWdlX2pvaW5gIEZ1bmN0aW9uIGFuZCBJdHMgSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBvZl9waHlfcGFja2FnZV9qb2luYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCYjMzk7cyB1c2VkIHdpdGggYHl0ODgyNGAuIFRoZSBjb2RlIGZpcnN0IGdyYWJzIHRoZSBkZXZpY2Ugbm9kZSBmcm9tIGBwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGVgLiBJZiB0aGlzIGlzIE5VTEwsIHdoaWNoIEkmIzM5O20gYXNzdW1pbmcgaXMgdGhlIHR5cGljYWwgc2NlbmFyaW8gd2l0aG91dCBEZXZpY2VUcmVlIChsaWtlIG9uIHg4Ni9hbWQ2NCBzeXN0ZW1zIHdoZW4gdXNpbmcgTURJTyBzY2FubmluZyBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIFVTQiksIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYC1FSU5WQUxgLgoKQW5kIHRoZW4gbG9vayBhdCBgeXQ4ODI0X3Byb2JlYDogIElmIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gIHJldHVybnMgYC1FSU5WQUxgLCB0aGUgYHl0ODgyNF9wcm9iZWAgZnVuY3Rpb24gKmltbWVkaWF0ZWx5KiByZXR1cm5zLiBTbywgYmFzaWNhbGx5LCBpZiB0aGUgZGV2aWNlIG5vZGUgbG9va3VwIGZhaWxzLCB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIGp1c3QgYmFpbHMgb3V0LiBUaGlzIG1lYW5zIG5vbmUgb2YgdGhlIGB5dDg4MjRfKmAgZnVuY3Rpb25zIHdpbGwgZXZlciBnZXQgY2FsbGVkIQoKTm93LCB0aGUgcXVlc3Rpb24gYmVjb21lczogaXMgRGV2aWNlVHJlZSBldmVuICphdmFpbGFibGUqIG9uIHg4Nl82NCwgZXNwZWNpYWxseSB3aXRoaW4gc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyPyAgTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IG9uIGFtZDY0LCBBQ1BJIGlzIHRoZSBzdGFuZGFyZCBhbmQgT3BlbkZpcm13YXJlL0RldmljZVRyZWUgKGBDT05GSUdfT0ZgKSBpcyB0eXBpY2FsbHkgZGlzYWJsZWQgb3IgYWJzZW50LCBlc3BlY2lhbGx5IHRob3NlIGBldGhlcm5ldC1waHktcGFja2FnZWAgbm9kZXMuIEkmIzM5O20gcmVhc29uYWJseSBzdXJlIHN5emthbGxlciBydW5zIGEgc3RhbmRhcmQgYW1kNjQga2VybmVsIGluIFFFTVUgKndpdGhvdXQqIERULgoKSnVzdCB0byBiZSBzdXJlLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIChgQ09ORklHX09GYCkgb24geDg2L2FtZDY0Li4uIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBpbmRlZWQgZGlzYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPRlxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9LY29uZmlnPTg9Y29uZmlnIEJVSUxUSU5fRFRCX0FMTFxuLS1cbmRyaXZlcnMvb2YvS2NvbmZpZy0xMC1cbmRyaXZlcnMvb2YvS2NvbmZpZzoxMTptZW51Y29uZmlnIE9GXG5kcml2ZXJzL29mL0tjb25maWctMTItXHRib29sIFwmIzM0O0RldmljZSBUcmVlIGFuZCBPcGVuIEZpcm13YXJlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMzMDIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlbHZpbmcgaW50byB0aGUgTW90b3Jjb21tIFlUODgyNCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kISBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nICpyZWFsbHkqIGZ1bmRhbWVudGFsOiBpcyB0aGUgTW90b3Jjb21tIFlUODgyNCBhY3R1YWxseSBhIHBoeXNpY2FsIGhhcmR3YXJlIEV0aGVybmV0IFBIWT8gVGhlIHBhdGNoIGRvY3VtZW50YXRpb24gKnNob3VsZCogY2xhcmlmeSB0aGlzLiBBaCwgaGVyZSB3ZSBnbyEgWWVzLCB0aGUgcGF0Y2ggZXhwbGljaXRseSBzdGF0ZXM6ICYjMzQ7TW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgaXMgYSBQSFkgcGFja2FnZSBvZiA0IFBIWXMuJiMzNDsgRXhjZWxsZW50LiBBbmQgaXQgY29udGludWVzLCAmIzM0O0VuYWJsZXMgc3VwcG9ydCBmb3IgTW90b3Jjb21tIG5ldHdvcmsgUEhZcy4gQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMgYW5kIFlUODgyNCA0ICogMi41RyBQSFkuJiMzNDsgVGhhdCYjMzk7cyBnb29kIGNvbmZpcm1hdGlvbi4KCk5vdywgYSBuZXcgZGV0YWlsIHN1cmZhY2VzIGluIHRoZSBjb2RlIHdoaWNoIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQuIFdoYXQgYWJvdXQgdGhpcyBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgdGhpbmcgdGhhdCB3YXMgYWRkZWQgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNgPyBXaGVyZSBleGFjdGx5IGlzIHRoYXQgZnVuY3Rpb24gY2FsbGVkIGZyb20gd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgRXRoZXJuZXQgUEhZIGRyaXZlciBzdHJ1Y3R1cmU/IFRpbWUgdG8gdXNlIG15IGZhdm9yaXRlIHRvb2w6IGdyZXBwZXIhIEkmIzM5O2xsIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTc3Nz1zdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg0LVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjc4NTpcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg2LVx0XHQocGh5ZGV2LCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9ODQwPXN0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTg0Ny1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo4NDg6XHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtODQ5LVx0XHRcdFx0XHQgICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9OTc4PXN0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTIzMS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMjMyOlx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEpO1xuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyMzMtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjQ0LVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjEyNDU6XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjQ2LVx0XHRcdFx0XHQgICBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjU3LWVycl9yZXN0b3JlX25vcm1hbDpcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMjU4Olx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyNTktXHRcdFx0XHRcdCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz0xNTE3PXN0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MDEtXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTcwMjpcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xKTtcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzAzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcxNC1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNzE1Olx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcxNi1cdFx0XHRcdFx0ICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcyOC1lcnJfcmVzdG9yZV9ub3JtYWw6XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTcyOTpcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzMwLVx0XHRcdFx0XHQgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jPTE0MDk9RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQxMS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQxMjogKiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIC0gY29uZmlndXJlIHRlbXBsYXRlIHRlc3Rtb2RlIHJlZ2lzdGVyc1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDEzLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQyMC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQyMTppbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDIyLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MzItfVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYzoxNDMzOkVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDM0LVxuLS1cbmluY2x1ZGUvbGludXgvcGh5Lmg9MjM1OT1pbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpO1xuaW5jbHVkZS9saW51eC9waHkuaDoyMzYwOmludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpO1xuaW5jbHVkZS9saW51eC9waHkuaC0yMzYxLWludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTA2MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtb3RvcmNvbW0uY2AgQ2hhbmdlcyoqCgpPa2F5LCBzbyBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgaXMgKm9ubHkqIGNhbGxlZCBieSB0aGUgeXQ4ODI0IGZ1bmN0aW9ucyBpbiBgbW90b3Jjb21tLmNgLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQnV0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYHl0cGh5X3NldF93b2xgIGFsc28gaW4gYG1vdG9yY29tbS5jYC4gTGV0JiMzOTtzIGp1bXAgaW50byBsaW5lcyA2MjItNjMyIG9mIGBtb3RvcmNvbW0uY2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZ1bmN0aW9uJiMzOTtzIHN0cnVjdHVyZS4gQWgsIGFuZCB3aGF0IHdhcyB0aGF0IHBhdGNoJiMzOTtzIGltcGFjdCBvbiBgeXRwaHlfc2V0X3dvbGA/IFRpbWUgdG8gcHVsbCB1cCB0aGUgYGdpdCBkaWZmYCBmb3IgdGhhdCBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYC4KCkhtbSwgdGhpcyBsb29rcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB0aGUgcGF0Y2ggc2ltcGx5IGFkZGVkIHRoZSBsaW5lIGBpZiAocmV0ICZsdDsgMCkgZ290byBlcnJfcmVzdG9yZV9wYWdlO2AgcmlnaHQgYWZ0ZXIgZGlzYWJsaW5nIHRoZSBXT0wgaW50ZXJydXB0LiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBlcnJvciBoYW5kbGluZyBwcm9jZWR1cmUuIExldCYjMzk7cyBtYWtlIHN1cmUsIGhvd2V2ZXIsIGFuZCByZXZpZXcgdGhlIGNvZGUgYmVmb3JlIGFuZCBhZnRlciB0aGUgY2hhbmdlIGluIGB5dHBoeV9zZXRfd29sYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFx0XHR2YWwgPSBZVFBIWV9XQ1JfRU5BQkxFIHwgWVRQSFlfV0NSX0lOVFJfU0VMO1xuIDcwMTpcdFx0XHR2YWwgfD0gWVRQSFlfV0NSX1RZUEVfUFVMU0UgfCBZVFBIWV9XQ1JfUFVMU0VfV0lEVEhfNjcyTVM7XG4gNzAyOlx0XHRcdHJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVFBIWV9XT0xfQ09ORklHX1JFRywgbWFzaywgdmFsKTtcbiA3MDM6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3MDQ6XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4gNzA1Olx0XG4gNzA2Olx0XHRcdC8qIEVuYWJsZSBXT0wgaW50ZXJydXB0ICovXG4gNzA3Olx0XHRcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLCAwLFxuIDcwODpcdFx0XHRcdFx0ICAgWVRQSFlfSUVSX1dPTCk7XG4gNzA5Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNzEwOlx0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuIDcxMTpcdFxuIDcxMjpcdFx0fSBlbHNlIHtcbiA3MTM6XHRcdFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg1MjFfUlNTUl9VVFBfU1BBQ0UpO1xuIDcxNDpcdFx0XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4gNzE1Olx0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuIDcxNjpcdFxuIDcxNzpcdFx0XHQvKiBEaXNhYmxlIFdPTCBmZWF0dXJlICovXG4gNzE4Olx0XHRcdG1hc2sgPSBZVFBIWV9XQ1JfRU5BQkxFIHwgWVRQSFlfV0NSX0lOVFJfU0VMO1xuIDcxOTpcdFx0XHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVRQSFlfV09MX0NPTkZJR19SRUcsIG1hc2ssIDApO1xuIDcyMDpcdFxuIDcyMTpcdFx0XHQvKiBEaXNhYmxlIFdPTCBpbnRlcnJ1cHQgKi9cbiA3MjI6XHRcdFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsXG4gNzIzOlx0XHRcdFx0XHQgICBZVFBIWV9JRVJfV09MLCAwKTtcbiA3MjQ6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3MjU6XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4gNzI2Olx0XHR9XG4gNzI3Olx0XG4gNzI4Olx0ZXJyX3Jlc3RvcmVfcGFnZTpcbiA3Mjk6XHRcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4gNzMwOlx0fVxuIDczMTpcdFxuIDczMjpcdC8qKlxuIDczMzpcdCAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgUEhZODgyNCByZWcgcGFnZVxuIDczNDpcdCAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4gNzM1Olx0ICpcbiA3MzY6XHQgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvXG4gNzM3Olx0ICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4gNzM4Olx0ICovXG4gNzM5Olx0c3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTExCgkJCQkJCQlvdXRwdXQ6IDE5MQoJCQkJCQkJdGhvdWdodHM6IDIxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUGF0Y2ggUmVhY2hhYmlsaXR5IGluIGEgRnV6emluZyBDb250ZXh0KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgdGhlIHBvaW50bGVzcyBhZGRpdGlvbiBpbiBgeXRwaHlfc2V0X3dvbGAuIEVzc2VudGlhbGx5LCBpdCBhZGRlZCBhIGNoZWNrIHRoYXQgd2FzIGFscmVhZHkgaW1wbGljaXRseSB0aGVyZSwgYSBjbGFzc2ljIG5vLW9wLiBCdXQgdGhlIGNvcmUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2AgYXJlIGFjY2Vzc2libGUgdmlhIGZ1enppbmcuCgpNeSBwcmltYXJ5IGNvbmNlcm4sIHdoaWNoIEkgbmVlZCB0byByZXNvbHZlLCBpcyB3aGV0aGVyIGl0IGlzICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiYjMzQ7IEkmIzM5O20gdmVyeSBmYW1pbGlhciB3aXRoIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LCBzbyBsZXQmIzM5O3MgdXNlIHRoYXQga25vd2xlZGdlIGhlcmU6IFNwZWNpZmljYWxseSwgd2hldGhlciB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkgZHJpdmVyICpyZXF1aXJlcyogcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpc24mIzM5O3QgZW11bGF0ZWQgYnkgdGhlIHN0YW5kYXJkIFFFTVUgc2V0dXAgSSYjMzk7bSB0ZXN0aW5nIHdpdGguCgpJIGtub3cgdGhhdCBQSFkgZHJpdmVycywgYnkgZGVmaW5pdGlvbiwgbWFuYWdlIGV4dGVybmFsIEV0aGVybmV0IHRyYW5zY2VpdmVyIGNoaXBzLiBUaGUgWVQ4ODI0IGlzIHN1Y2ggYSBjaGlwIGZyb20gYSByZWFsIHNlbWljb25kdWN0b3IgY29tcGFueS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IFFFTVUgb24geDg2L2FtZDY0IGVtdWxhdGVzIEludGVsIChlMTAwMC9lMTAwMGUpLCBWaXJ0aW8sIGFuZCBSZWFsdGVrIGhhcmR3YXJlLCBidXQgbm9uZSBvZiB0aGVzZSB1c2UgUEhZcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5IHRoZSBrZXJuZWwmIzM5O3MgcGh5bGliLiBUaGVyZWZvcmUsIG5vIHBoeXNpY2FsIE1ESU8gYnVzICh1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggUEhZcykgaXMgZW11bGF0ZWQsIG1ha2luZyB0aGlzIGFuIGltbWVkaWF0ZSByZWQgZmxhZy4KClRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIHRoZSB1c2Ugb2YgRGV2aWNlIFRyZWUgKERUKS4gVGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uICpleHBsaWNpdGx5KiB1c2VzIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gIGFuZCBleHBlY3RzIGFuICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OyBub2RlIGluIHRoZSBEVC4gV2l0aG91dCBEVCwgb3IgYSBzcGVjaWZpYyBEVCBiaW5kaW5nIGZvciBhIG1vdG9yY29tbSBZVDg4MjQsIHRoZSBwcm9iZSBmYWlscyBpbW1lZGlhdGVseS4gRXZlbiBpZiBhIG1vY2sgTURJTyBidXMgd2VyZSBzb21laG93IHRyaWdnZXJlZCwgdGhlIGRyaXZlciB3b3VsZCBmYWlsIGFzIHRoZSBPRiBub2RlIGlzIGV4cGVjdGVkIHRvIGJlIHByZXNlbnQsIGFuZCBpdCBpcyBub3QgaW4gdGhlIGNvbnRleHQgb2YgYW1kNjQgJiM0Mzsgc3RhbmRhcmQgUUVNVS4KCkZ1cnRoZXJtb3JlLCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgd2l0aGluIHRoaXMgZHJpdmVyIGFwcGVhcnMgdG8gYmUgKmV4Y2x1c2l2ZWx5KiBjYWxsZWQgYnkgdGhpcyBkcml2ZXI7IG5vIG90aGVyIGtlcm5lbCBjb2RlIGNhbGxzIGl0LiBNZWFuaW5nIHRoYXQsIHRoaXMgcGF0Y2ggaXMgb25seSByZWxldmFudCB0byBwaHlzaWNhbCBNb3RvcmNvbW0gaGFyZHdhcmUgd2l0aCBzcGVjaWZpYyBEZXZpY2UgVHJlZSBjb25maWd1cmF0aW9ucy4KClRoZSBjaGFuZ2VzIGluIGB5dHBoeV9zZXRfd29sYCBhcmUgdWx0aW1hdGVseSBpbmNvbnNlcXVlbnRpYWw7IHRoaXMgZHJpdmVyIGlzIHVucmVhY2hhYmxlIGFueXdheS4gSSBncmVwcGVkIHRoZSBjb2RlYmFzZSBhbmQgY29uZmlybWVkIHRoYXQgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgIGlzbiYjMzk7dCBjYWxsZWQgYW55d2hlcmUgZWxzZS4KCkhlbmNlLCBJIGNvbmNsdWRlIHRoZSBjaGFuZ2VzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBmdXp6aW5nIGNvbnRleHQuClRodXMsICoqV29ydGhGdXp6aW5nID0gZmFsc2UuKioKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41RyBFdGhlcm5ldCBQSFkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGFuZCBhZGRzIGFuIGFzc29jaWF0ZWQgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy4gVGhlIG1vZGlmaWVkIGNvZGUgdGFyZ2V0cyBhIHNwZWNpZmljIHBoeXNpY2FsIEV0aGVybmV0IFBIWSB0cmFuc2NlaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBzcGVjaWZpYyBEZXZpY2UgVHJlZSBkZXNjcmlwdGlvbiAoJiMzOTtldGhlcm5ldC1waHktcGFja2FnZSYjMzk7KSwgd2hpY2ggaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgeDg2XzY0L1FFTVUgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZSBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpcyBzb2xlbHkgY2FsbGVkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLCBhbmQgcHJvYmUgaW1tZWRpYXRlbHkgZmFpbHMgd2l0aG91dCB0aGUgT0Ygbm9kZS4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41RyBFdGhlcm5ldCBQSFkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGFuZCBhZGRzIGFuIGFzc29jaWF0ZWQgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy4gVGhlIG1vZGlmaWVkIGNvZGUgdGFyZ2V0cyBhIHNwZWNpZmljIHBoeXNpY2FsIEV0aGVybmV0IFBIWSB0cmFuc2NlaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBzcGVjaWZpYyBEZXZpY2UgVHJlZSBkZXNjcmlwdGlvbiAoJiMzOTtldGhlcm5ldC1waHktcGFja2FnZSYjMzk7KSwgd2hpY2ggaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgeDg2XzY0L1FFTVUgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZSBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpcyBzb2xlbHkgY2FsbGVkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLCBhbmQgcHJvYmUgaW1tZWRpYXRlbHkgZmFpbHMgd2l0aG91dCB0aGUgT0Ygbm9kZS4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6NTk6NDkuNzg0MTA0NzY1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MzE4MjgyNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgcXVhZC1wb3J0IDIuNUcgRXRoZXJuZXQgUEhZIGluIGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBhbmQgYWRkcyBhbiBhc3NvY2lhdGVkIGhlbHBlciBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIGluIGRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMuIFRoZSBtb2RpZmllZCBjb2RlIHRhcmdldHMgYSBzcGVjaWZpYyBwaHlzaWNhbCBFdGhlcm5ldCBQSFkgdHJhbnNjZWl2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgc3BlY2lmaWMgRGV2aWNlIFRyZWUgZGVzY3JpcHRpb24gKCdldGhlcm5ldC1waHktcGFja2FnZScpLCB3aGljaCBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB4ODZfNjQvUUVNVSBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlIGhlbHBlciBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIGlzIHNvbGVseSBjYWxsZWQgYnkgdGhlIFlUODgyNCBkcml2ZXIsIGFuZCBwcm9iZSBpbW1lZGlhdGVseSBmYWlscyB3aXRob3V0IHRoZSBPRiBub2RlLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjU5OjQ5Ljc4NDEzNDMxNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MTA1OTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFlMzFlYTFhNmI1MmM4NjhiOWM3YTc0OTYxMjg2MWYwYzE3MmJlOWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTA6NTk6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTNlOWY3NjU0MDRhM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbFxcbkBAIC0wLDAgKzEsNTkgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sI1xcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4rXFxuK3RpdGxlOiBNb3RvckNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWVxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBLeWxlIFN3aXRjaCBcXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjpcXG4rICBNb3RvcmNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWSBpcyBhIFBIWSBwYWNrYWdlIG9mIDQgUEhZcy5cXG4rXFxuKyRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIG1vdG9yY29tbSx5dDg4MjQtcGFja2FnZVxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuKyAgLSBwaHktbW9kZVxcbisgIC0gcmVnXFxuK1xcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAtIHxcXG4rICAgIG1kaW8ge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcXG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcIm1vdG9yY29tbSx5dDg4MjQtcGFja2FnZVxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M5XFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgIHBoeS1tb2RlID0gXFxcImludGVybmFsXFxcIjtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA0IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M0XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA1IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M1XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA2IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M2XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA3IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M3XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xcbmluZGV4IGQzODM1NTk3ZTM3OTUuLjk5NmQ3NWFmZWQ0NDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xcbkBAIC0zNjEsOSArMzYxLDEwIEBAIGNvbmZpZyBNSUNST1NFTUlfUEhZXFxuIFxcbiBjb25maWcgTU9UT1JDT01NX1BIWVxcbiBcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFBIWXNcXFwiXFxuK1xcdHNlbGVjdCBQSFlfUEFDS0FHRVxcbiBcXHRoZWxwXFxuIFxcdCAgRW5hYmxlcyBzdXBwb3J0IGZvciBNb3RvcmNvbW0gbmV0d29yayBQSFlzLlxcbi1cXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzLlxcbitcXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzIGFuZCBZVDg4MjQgNCAqIDIuNUcgUEhZLlxcbiBcXG4gY29uZmlnIE5BVElPTkFMX1BIWVxcbiBcXHR0cmlzdGF0ZSBcXFwiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQSFlzXFxcIlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG5pbmRleCA5MGE0Zjg2ZjI3NThiLi5iNjA5NDhjOWNlODg0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xcbkBAIC0xLDI0ICsxLDMxIEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xcbiAvKlxcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXFxuKyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLlxcbiAgKlxcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXFx1MDAzY3Bnd2lwZW91dEBnbWFpbC5jb21cXHUwMDNlXFxuICAqIEF1dGhvcjogRnJhbmsgXFx1MDAzY0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbVxcdTAwM2VcXG4rICogQXV0aG9yOiBLeWxlIFxcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVxcdTAwM2VcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9uZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcXCJwaHlsaWIuaFxcXCJcXG4rXFxuICNkZWZpbmUgUEhZX0lEX1lUODUxMVxcdFxcdDB4MDAwMDAxMGFcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXFx0XFx0MHgwMDAwMDExYVxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcXHRcXHQweDRmNTFlOTI4XFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVxcdFxcdDB4NGY1MWU5MWJcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1xcdFxcdDB4NGY1MWU5MWFcXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXFx0XFx0MHg0ZjUxZWExOVxcbisjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcXHRcXHQweDRmNTFlOGI4XFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xcbiAgKlxcdFVUUCBSZWdpc3RlciBzcGFjZVxcdHxcXHRGSUJFUiBSZWdpc3RlciBzcGFjZVxcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuQEAgLTMwLDYgKzM3LDE4IEBAXFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gICovXFxuIFxcbisvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcXG4rICogVVRQIFJlZ2lzdGVyIHNwYWNlIHwgVVNYR01JSSBSZWdpc3RlciBzcGFjZVxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqIHwgVVRQIE1JSVxcdFxcdHwgVVNYR01JSSBNSUlcXHRcXHR8XFxuKyAqIHwgVVRQIE1NRFxcdFxcdHxcXHRcXHRcXHR8XFxuKyAqIHwgVVRQIEV4dGVuZGVkXFx0fCBVU1hHTUlJIEV4dGVuZGVkXFx0fFxcbisgKiB8IFVUUCBUb3AgRXh0ZW5kZWRcXHR8IFVTWEdNSUkgVG9wIEV4dGVuZGVkXFx0fFxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqIHwgICBDb21tb24gVG9wIEV4dGVuZGVkXFx0XFx0XFx0fFxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqL1xcbitcXG4gLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cXG4gXFxuIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cXG5AQCAtMzgxLDYgKzQwMCwxMyBAQFxcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcXHQwXFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9GT1JDRV9CWDI1MDBcXHRcXHQxXFxuIFxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0tcXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFXFx0XFx0KDB4MSlcXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcXHRcXHRcXHQoMHgwKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1xcdFxcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXFx0XFx0XFx0QklUKDEzKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkdcXHRcXHQoMHg3KVxcbitcXG4gc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcXG4gXFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXFxuQEAgLTM5OSw2ICs0MjUsMTIgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0dTggcmVnX3BhZ2U7XFxuIH07XFxuIFxcbitzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcXG4rXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZV9tb2RlO1xcbitcXHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUHMgb3BlcmF0aW9uIGlzb2xhdGlvbiBkdXJpbmcgc3dhcCByZWcgc3BhY2UgKi9cXG4rXFx0c3RydWN0IG11dGV4IHNoYXJlZF9sb2NrO1xcbit9O1xcbitcXG4gLyoqXFxuICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuQEAgLTQzNyw2ICs0NjksNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxcbisgKlxcbisgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcXG4rICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdHJldCBcXHUwMDI2PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcXG4rXFx0cmV0IHw9IChwYWdlIFxcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCk7XFxuK1xcbitlcnI6XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG5AQCAtNjIyLDE1ICs3MTgsMTA1NyBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxcbiBcXHRcXHRtYXNrID0gWVRQSFlfV0NSX0VOQUJMRSB8IFlUUEhZX1dDUl9JTlRSX1NFTDtcXG4gXFx0XFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUUEhZX1dPTF9DT05GSUdfUkVHLCBtYXNrLCAwKTtcXG4gXFxuLVxcdFxcdC8qIERpc2FibGUgV09MIGludGVycnVwdCAqL1xcbi1cXHRcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcXG4tXFx0XFx0XFx0XFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XFxuK1xcdFxcdC8qIERpc2FibGUgV09MIGludGVycnVwdCAqL1xcbitcXHRcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2VcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IGN1cnJlbnQgcmVnIHNwYWNlIG9mIHl0ODgyNCAoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9cXG4rICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBvbGRfcGFnZTtcXG4rXFxuK1xcdHJldHVybiBvbGRfcGFnZSBcXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7XFxuK307XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcGFnZTogUmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXHR1MTYgZGF0YTtcXG4rXFxuK1xcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIG9sZF9wYWdlO1xcbitcXHRkYXRhID0gb2xkX3BhZ2UgXFx1MDAyNiAofllUODgyNF9SU1NSX1NQQUNFX01BU0spO1xcbitcXHRkYXRhIHw9IHBhZ2U7XFxuK1xcbitcXHRyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XFxuK307XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBpbnZhbGlkIHRlc3QgbW9kZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuK1xcdFxcdChwaHlkZXYsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKCkgLSBlbmFibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBlbmFibGUgc2RzIGlzb2xhdGUgKi9cXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfSVNPTEFURSwgQk1DUl9JU09MQVRFKTtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdC8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqL1xcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgVVRQIHNvZnRyZXNldC5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQsIEJNQ1JfUkVTRVQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0Lyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi9cXG4rXFx0cmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZCgpIC0gZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGVcXG4rICogYW5kIHNkcyBzb2Z0cmVzZXQuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXHRpbnQgcmV0ID0gLTE7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBzZHMgc29mdHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGUgKi9cXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0lTT0xBVEUsXFxuK1xcdFxcdFxcdCAgIEJNQ1JfUkVTRVQgXFx1MDAyNiB+Qk1DUl9JU09MQVRFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jayAqL1xcbitcXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChfX3BoeV9yZWFkLCB2YWwsXFxuK1xcdFxcdFxcdFxcdCh2YWwgXFx1MDAzYyAwKSB8fCAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLCA1MDAwMCwgNjAwMDAwLFxcbitcXHRcXHRcXHRcXHR0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHZhbDtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdC8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqL1xcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMoKSAtIGNhbGxlZCB0byBkbyBzdG9yZSB3b3JraW5nIHN0YXR1c1xcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHJldDogb3BlcmF0aW9uJ3MgcmV0dXJuIGNvZGVcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZXQpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByO1xcbitcXG4rXFx0LyogY29uZmlndXJlIG5vcm1hbCB0ZXN0IG1vZGUgKi9cXG4rXFx0ciA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSAhPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHIgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldCA9IHI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc29mdF9yZXNldCgpIC0gY2FsbGVkIHRvIGRvIFBIWSBzb2Z0d2FyZSByZXNldFxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0LyogdXRwIHNvZnQgcmVzZXQgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK3JldHJ5OlxcbitcXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCB1dHAgaW5pdFxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogcG93ZXIgZG93biAqL1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIHBsbCBjYWxpYnJhdGlvbiAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4MGNiYSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGEwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6YXRpb24gdXRwICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0LyogZW5hYmxlIG5pYmJsZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDAwMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIGlkbGUgZXJyIGRldGVjdCBlbmFibGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgMi41RyBsb25nIGNhYmxlIHBlcmZvcm1hbmNlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNzIsIDB4NTAzOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBmYXN0IHJldHJhaW4gKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM1OSwgMHgyMTQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDBjLCAweGMxYTApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIDIuNUcgdGVtcGxhdGUgdG9uZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDAwODMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZTIsIDB4MDE0OSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODAsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgMTAwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNDAsIDB4MzAxZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZSwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzAsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MSwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgMTAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDcxZiwgMHgwMDM2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmIsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgMTBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NiwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY3LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OSwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwNTksIDB4NDA0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmUsIDB4NTMwOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDIsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGM4LCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YSwgMHg0MGZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODIsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDAwNmUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcdC8qIHJlc2V0ICovXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXFxuK1xcdFxcdFxcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcXG4rXFx0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwgISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9yZXN0b3JlOlxcbitcXHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSByO1xcbitcXHRyZXR1cm4gcmV0O1xcbitcXG4rZXJyX3Jlc3RvcmVfbm9ybWFsOlxcbitcXHRyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcXG4rXFx0aW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcXG4rXFx0aW50IHJldCA9IC0xO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogcmVhZCBlZnVzZSAqL1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRlbHNlXFxuK1xcdFxcdHZhbF8xID0gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR2YWxfMiA9IHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTE0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmFsXzMgPSByZXQ7XFxuK1xcbitcXHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiZSwgMHgwMDBkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIGFuYWxvZyBDRFIgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIFZDTyAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cXG4rXFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MjkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xcbitcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDcpIHwgQklUKDYpKSkgXFx1MDAzZVxcdTAwM2UgNjtcXG4rXFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgMTIpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgXFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xcbitcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSkgXFx1MDAzZVxcdTAwM2UgNDtcXG4rXFx0cmV0IHw9IHRtcDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xcbitcXHR0bXAgPSAodmFsXzMgXFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XFxuK1xcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDEyKTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJiLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIFNlcmRlcyBMRE8gKi9cXG4rXFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcXG4rXFx0dG1wID0gKHZhbF8yIFxcdTAwMjYgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkpIFxcdTAwM2VcXHUwMDNlIDI7XFxuK1xcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDQpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcXG4rXFx0dG1wID0gKHZhbF8yIFxcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpIFxcdTAwM2VcXHUwMDNlIDU7XFxuK1xcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDgpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcXHUwMDNlIDggKi9cXG4rXFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9SRVNWMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCBcXHUwMDI2PSB+WVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLO1xcbitcXHRyZXQgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORztcXG4rXFx0cmV0IHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiByZXNldCBzZXJkZXMgKi9cXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxcbitcXHRcXHRcXHQgICBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jazsgX19waHlfcmVhZCB0YWtlcyBubyBsb2NrICovXFxuK1xcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCxcXG4rXFx0XFx0XFx0XFx0KHZhbCBcXHUwMDNjIDApIHx8ICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksIDUwMDAwLCA2MDAwMDAsXFxuK1xcdFxcdFxcdFxcdHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gdmFsO1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdFxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFx0aW50IHIgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MSwgMHgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHBvd2VyIGRvd24gKi9cXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4Y2JhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhhMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YywgMHg2MDY4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM4OCwgMHhhMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRlMiwgMHgxNDkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMi41RyB0ZW1wYXRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGY4LCAweGIzZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJjLCAweDUwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzIyLCAweDY0NDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAwIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZlLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZmLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcxLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NzFmLCAweDM2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdC8qIDEwIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZiLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAgdGVtcGF0ZSBNQVUqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiBFTUMgQ1MsIEluY29uc2lzdGVudCB3aXRoIGV4dGVybmFsIHBoeSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiBFTUMgUkUqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcdC8qIHJlc2V0ICovXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXFxuK1xcdFxcdFxcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcXG4rXFx0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwgISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcmVzdG9yZTpcXG4rXFx0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rXFxuK2Vycl9yZXN0b3JlX25vcm1hbDpcXG4rXFx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSByO1xcbitcXHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSByO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldik7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTtcXG4gXFxuLWVycl9yZXN0b3JlX3BhZ2U6XFxuLVxcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK1xcdHBoeWRldl9kYmcocGh5ZGV2LCBcXFwiJXMgZG9uZSwgcGh5IGFkZHI6ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4rXFx0XFx0ICAgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRyZXR1cm4gcmV0O1xcbitlcnI6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuQEAgLTMxMDQsNiArNDI0Miw0MTggQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB5dDg4MjRfZ2V0X2ZlYXR1cmVzIC0gcmVhZCBtbWQgcmVnaXN0ZXIgdG8gZ2V0IDIuNUcgY2FwYWJpbGl0eVxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0cmV0ID0geXQ4ODIxX2dldF9mZWF0dXJlcyhwaHlkZXYpO1xcbitcXG4rZXJyOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9hbmVnX2RvbmUoKSAgLSBjaGVjayBuZWdvdGlhdGlvbiBzdGF0ZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgbGluayA9IDA7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0bGluayA9ICEhKHJldCBcXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcXG4rXFxuK1xcdHBoeWRldl9kYmcocGh5ZGV2LCBcXFwiJXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4rXFx0XFx0ICAgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xcbitcXHRyZXR1cm4gbGluaztcXG4rZXJyOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZCgpIC0gIGRldGVybWluZXMgdGhlIHNwZWVkIGFuZCBkdXBsZXggb2Ygb25lIHBhZ2VcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgbGluayA9IDA7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcXG4rXFx0XFx0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX2xwYShwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHR2YWwgPSByZXQ7XFxuK1xcbitcXHRsaW5rID0gdmFsIFxcdTAwMjYgWVRQSFlfU1NSX0xJTks7XFxuK1xcdGlmIChsaW5rKVxcbitcXHRcXHR5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7XFxuK1xcbitcXHRpZiAobGluaykge1xcbitcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VsaW5rID09IDApXFxuK1xcdFxcdFxcdHBoeWRldl9kYmcocGh5ZGV2LCBcXFwiJXMsIHBoeSBhZGRyOiAlZCwgbGluayB1cFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgX19mdW5jX18sIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VsaW5rID0gMTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlbGluayA9PSAxKVxcbitcXHRcXHRcXHRwaHlkZXZfZGJnKHBoeWRldiwgXFxcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmsgZG93blxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgX19mdW5jX18sIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VsaW5rID0gMDtcXG4rXFx0fVxcbitcXHRwaHlfcmVzb2x2ZV9hbmVnX3BhdXNlKHBoeWRldik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldCA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKCk6IHV0cCBwb3dlciBvbi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOIHwgQk1DUl9JU09MQVRFLCAweDApO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9kb3duKCk6IHV0cCBwb3dlciBkb3duLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9wb3dlcl9vbigpICAtIHNldCB1dHAgcG93ZXIgb24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFx0aW50IHI7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdC8qIHV0cCBwb3dlciBvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBzZHMgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHV0cCBwb3dlciBvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rcmV0cnk6XFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSBQSFkgdXAgb3BlcmF0aW9uIHN1Y2NlZWRzIGJ1dCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb25cXG4rXFx0ICogZmFpbHMsIHJldmVydCB0byB0aGUgZGVmYXVsdCBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHIgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSByO1xcbitcXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVzdW1lKCkgLSByZXN1bWUgdGhlIGhhcmR3YXJlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0XFx0LyogdXRwIHBvd2VyIGRvd24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBzZHMgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHV0cCBwb3dlciBkb3duICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK3JldHJ5OlxcbitcXHQvKlxcbitcXHQgKiBJZiB0aGUgUEhZIGRvd24gb3BlcmF0aW9uIHN1Y2NlZWRzIGJ1dCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb25cXG4rXFx0ICogZmFpbHMsIHJldmVydCB0byB0aGUgZGVmYXVsdCBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHIgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0geXQ4ODI0X3Bvd2VyX2Rvd24ocGh5ZGV2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHBoeV9jdHJsID0gMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXFxuK1xcdFxcdFxcdCAgICAgIHBoeWRldi1cXHUwMDNlYWR2ZXJ0aXNpbmcpKVxcbitcXHRcXHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xcbitcXG4rXFx0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsIHBoeV9jdHJsKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0cmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpO1xcbitcXG4rZXJyOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2FnZSBmb3IgcGh5ODgyNC5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmICghcHJpdiB8fCAhbnApIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCIlczogbWlzc2luZyBzaGFyZWQgcHJpdiBvciBEVCBub2RlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBfX2Z1bmNfXyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJlcyA9IG9mX2dldF9waHlfbW9kZShucCwgXFx1MDAyNnByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlKTtcXG4rXFx0aWYgKHJlcyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiJXMsIHBoeS1tb2RlIG1pc3NpbmcgaW4gRFRTLlxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLFxcbkBAIC0zMTkwLDEzICs0NzQwLDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcXG4gXFx0XFx0LnN1c3BlbmRcXHRcXHQ9IHl0ODgyMV9zdXNwZW5kLFxcbiBcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSB5dDg4MjFfcmVzdW1lLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcXG4rXFx0XFx0Lm5hbWUgPSBcXFwiWVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFxcXCIsXFxuK1xcdFxcdC5nZXRfZmVhdHVyZXMgPSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLFxcbitcXHRcXHQucmVhZF9wYWdlID0geXQ4ODI0X3JlYWRfcGFnZSxcXG4rXFx0XFx0LndyaXRlX3BhZ2UgPSB5dDg4MjRfd3JpdGVfcGFnZSxcXG4rXFx0XFx0LnByb2JlID0geXQ4ODI0X3Byb2JlLFxcbitcXHRcXHQuY29uZmlnX2FuZWcgPSB5dDg4MjRfY29uZmlnX2FuZWcsXFxuK1xcdFxcdC5hbmVnX2RvbmUgPSB5dDg4MjRfYW5lZ19kb25lLFxcbitcXHRcXHQuY29uZmlnX2luaXQgPSB5dDg4MjRfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5yZWFkX3N0YXR1cyA9IHl0ODgyNF9yZWFkX3N0YXR1cyxcXG4rXFx0XFx0LnNvZnRfcmVzZXQgPSB5dDg4MjRfc29mdF9yZXNldCxcXG4rXFx0XFx0LnN1c3BlbmQgPSB5dDg4MjRfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZSA9IHl0ODgyNF9yZXN1bWUsXFxuK1xcdH0sXFxuIH07XFxuIFxcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xcbiBcXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXFxcIik7XFxuIE1PRFVMRV9BVVRIT1IoXFxcIlBldGVyIEdlaXNcXFwiKTtcXG4gTU9EVUxFX0FVVEhPUihcXFwiRnJhbmtcXFwiKTtcXG4rTU9EVUxFX0FVVEhPUihcXFwiS3lsZVxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcXG5AQCAtMzIwNiw2ICs0NzcyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XFxuIFxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXFxuIFxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LFxcbiBcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LFxcbitcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxcbiBcXHR7IC8qIHNlbnRpbmVsICovIH1cXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXFxuaW5kZXggODcwOTIwMzExZjlhMC4uZjhlMDNkM2FmYTQ1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xcbkBAIC0xNDA4LDYgKzE0MDgsMzAgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKTtcXG4gXFxuKy8qKlxcbisgKiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIC0gY29uZmlndXJlIHRlbXBsYXRlIHRlc3Rtb2RlIHJlZ2lzdGVyc1xcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICogQHRlc3RfbW9kZTogdGVzdG1vZGUgaW5jbHVkZXMgTm9ybWFsIHRvIFRlc3QgbW9kZSA3XFxuKyAqXFxuKyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIChlLmcuIHJlZ2lzdGVyXFxuKyAqIHJlYWQvd3JpdGUgZXJyb3IpLlxcbisgKi9cXG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcXG4re1xcbitcXHRpbnQgY3RybDtcXG4rXFxuK1xcdGlmICh0ZXN0X21vZGUgXFx1MDAzYyBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwgfHxcXG4rXFx0ICAgIHRlc3RfbW9kZSBcXHUwMDNlIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzcpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGN0cmwgPSBGSUVMRF9QUkVQKE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIHRlc3RfbW9kZSk7XFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlRfVEVTVE1PREUsXFxuK1xcdFxcdFxcdCAgICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIGN0cmwpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xcbitcXG4gLyoqXFxuICAqIGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnIC0gZ2V0IFBMQ0EgY29uZmlndXJhdGlvbiBmcm9tIHN0YW5kYXJkIHJlZ2lzdGVyc1xcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCAzZDhhZmU2YjdmMWM1Li5mYjgyN2NjM2M5OGY0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuQEAgLTIzNTcsNiArMjM1Nyw3IEBAIGludCBnZW5waHlfYzQ1X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTtcXG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XFxuIGludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IHBoeV9wbGNhX2NmZyAqcGxjYV9jZmcpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG5pbmRleCAwNmY0YmMzYzIwYzcxLi4zNTNjYTEzYzY0ZmNhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuQEAgLTYzLDYgKzYzLDcgQEBcXG4gLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TV0FQUE9MXFx0MTMwXFx0LyogMTBHQkFTRS1UIHBhaXIgc3dhcCBcXHUwMDI2IHBvbGFyaXR5ICovXFxuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfVFhQV1JcXHQxMzFcXHQvKiAxMEdCQVNFLVQgVFggcG93ZXIgY29udHJvbCAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFIDEzMiAvKiBUZXN0IG1vZGUgY29udHJvbCAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NOUlxcdDEzM1xcdC8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuXFxuIFxcdFxcdFxcdFxcdFxcdCAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0NTUlxcdDE0N1xcdC8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovXFxuQEAgLTMyMCw2ICszMjEsMTcgQEBcXG4gLyogUE1BIDEwR0JBU0UtUiBGYXN0IFJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyLiAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfRU5BQkxFXFx0MHgwMDAxXFx0LyogRmFzdCByZXRyYWluIGVuYWJsZSAqL1xcbiBcXG4rLyogUE1BIDEwR0JBU0UtVCBUZW1wbGF0ZSBUZXN0IE1vZGUgUmVnaXN0ZXIqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0sgR0VOTUFTSygxNSwgMTMpIC8qIFRlbXBsYXRlIHRlc3QgbW9kZSAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCAweDAgLyogVGVtcGxhdGUgTm9ybWFsICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSAweDEgLyogVGVtcGxhdGUgVGVzdE1vZGUxICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMiAweDIgLyogVGVtcGxhdGUgVGVzdE1vZGUyICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMyAweDMgLyogVGVtcGxhdGUgVGVzdE1vZGUzICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNCAweDQgLyogVGVtcGxhdGUgVGVzdE1vZGU0ICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNSAweDUgLyogVGVtcGxhdGUgVGVzdE1vZGU1ICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNiAweDYgLyogVGVtcGxhdGUgVGVzdE1vZGU2ICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNyAweDcgLyogVGVtcGxhdGUgVGVzdE1vZGU3ICovXFxuK1xcbiAvKiBQQ1MgMTBHQkFTRS1SLy1UIHN0YXR1cyByZWdpc3RlciAxLiAqL1xcbiAjZGVmaW5lIE1ESU9fUENTXzEwR0JSVF9TVEFUMV9CTEtMS1xcdDB4MDAwMVxcdC8qIEJsb2NrIGxvY2sgYXR0YWluZWQgKi9cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjU5OjUxLjIyNTk1MjgyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTE3ODc2NDIwNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41RyBFdGhlcm5ldCBQSFkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGFuZCBhZGRzIGFuIGFzc29jaWF0ZWQgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy4gVGhlIG1vZGlmaWVkIGNvZGUgdGFyZ2V0cyBhIHNwZWNpZmljIHBoeXNpY2FsIEV0aGVybmV0IFBIWSB0cmFuc2NlaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBzcGVjaWZpYyBEZXZpY2UgVHJlZSBkZXNjcmlwdGlvbiAoJ2V0aGVybmV0LXBoeS1wYWNrYWdlJyksIHdoaWNoIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9RRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGUgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaXMgc29sZWx5IGNhbGxlZCBieSB0aGUgWVQ4ODI0IGRyaXZlciwgYW5kIHByb2JlIGltbWVkaWF0ZWx5IGZhaWxzIHdpdGhvdXQgdGhlIE9GIG5vZGUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZTMxZWExYTZiNTJjODY4YjljN2E3NDk2MTI4NjFmMGMxNzJiZTlhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTA6NTk6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTNlOWY3NjU0MDRhM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcbkBAIC0wLDAgKzEsNTkgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IE1vdG9yQ29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIEt5bGUgU3dpdGNoIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246XG4rICBNb3RvcmNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWSBpcyBhIFBIWSBwYWNrYWdlIG9mIDQgUEhZcy5cbitcbiskcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0gbW90b3Jjb21tLHl0ODgyNC1wYWNrYWdlXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gcGh5LW1vZGVcbisgIC0gcmVnXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgIG1kaW8ge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJtb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2VcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2M5XHUwMDNlO1xuK1xuKyAgICAgICAgICAgIHBoeS1tb2RlID0gXCJpbnRlcm5hbFwiO1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA0IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNFx1MDAzZTtcbisgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA1IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNVx1MDAzZTtcbisgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA2IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNlx1MDAzZTtcbisgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA3IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjN1x1MDAzZTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBkMzgzNTU5N2UzNzk1Li45OTZkNzVhZmVkNDQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtMzYxLDkgKzM2MSwxMCBAQCBjb25maWcgTUlDUk9TRU1JX1BIWVxuIFxuIGNvbmZpZyBNT1RPUkNPTU1fUEhZXG4gXHR0cmlzdGF0ZSBcIk1vdG9yY29tbSBQSFlzXCJcbitcdHNlbGVjdCBQSFlfUEFDS0FHRVxuIFx0aGVscFxuIFx0ICBFbmFibGVzIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBuZXR3b3JrIFBIWXMuXG4tXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzLlxuK1x0ICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcyBhbmQgWVQ4ODI0IDQgKiAyLjVHIFBIWS5cbiBcbiBjb25maWcgTkFUSU9OQUxfUEhZXG4gXHR0cmlzdGF0ZSBcIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEhZc1wiXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCA5MGE0Zjg2ZjI3NThiLi5iNjA5NDhjOWNlODg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xLDI0ICsxLDMxIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXG4gLypcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXG4rICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXIuXG4gICpcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXHUwMDNjcGd3aXBlb3V0QGdtYWlsLmNvbVx1MDAzZVxuICAqIEF1dGhvcjogRnJhbmsgXHUwMDNjRnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4rICogQXV0aG9yOiBLeWxlIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwicGh5bGliLmhcIlxuK1xuICNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbisjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcdFx0MHg0ZjUxZThiOFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xuICAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQEAgLTMwLDYgKzM3LDE4IEBAXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAqL1xuIFxuKy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xuKyAqIFVUUCBSZWdpc3RlciBzcGFjZSB8IFVTWEdNSUkgUmVnaXN0ZXIgc3BhY2VcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICogfCBVVFAgTUlJXHRcdHwgVVNYR01JSSBNSUlcdFx0fFxuKyAqIHwgVVRQIE1NRFx0XHR8XHRcdFx0fFxuKyAqIHwgVVRQIEV4dGVuZGVkXHR8IFVTWEdNSUkgRXh0ZW5kZWRcdHxcbisgKiB8IFVUUCBUb3AgRXh0ZW5kZWRcdHwgVVNYR01JSSBUb3AgRXh0ZW5kZWRcdHxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICogfCAgIENvbW1vbiBUb3AgRXh0ZW5kZWRcdFx0XHR8XG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqL1xuK1xuIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovXG4gXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuQEAgLTM4MSw2ICs0MDAsMTMgQEBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcdDBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwXHRcdDFcbiBcbisjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0tcdFx0XHRCSVQoMClcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0VcdFx0KDB4MSlcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVx0XHRcdCgweDApXG4rI2RlZmluZSBZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0tcdFx0R0VOTUFTSygzLCAwKVxuKyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRVx0XHRcdEJJVCgxMylcbisjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkdcdFx0KDB4NylcbitcbiBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcbiBcdCAqIHRoaXMgbWVhbnMgdGhhdCB5dDg1MjEgbWF5IHdvcmsgaW4gdXRwIG9yIGZpYmVyIG1vZGUgd2hpY2ggZGVwZW5kc1xuQEAgLTM5OSw2ICs0MjUsMTIgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdHU4IHJlZ19wYWdlO1xuIH07XG4gXG4rc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiB7XG4rXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlX21vZGU7XG4rXHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUHMgb3BlcmF0aW9uIGlzb2xhdGlvbiBkdXJpbmcgc3dhcCByZWcgc3BhY2UgKi9cbitcdHN0cnVjdCBtdXRleCBzaGFyZWRfbG9jaztcbit9O1xuK1xuIC8qKlxuICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTQzNyw2ICs0NjksNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qKlxuKyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuKyAqXG4rICogUmV0dXJuczogdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4re1xuK1x0aW50IHJldDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHdyaXRlIGEgUEhZJ3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byB3cml0ZVxuKyAqIEB2YWw6IHJlZ2lzdGVyIHZhbCB0byB3cml0ZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXG4rXHRcdFx0ICAgICAgIHUxNiB2YWwpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7XG4rfVxuK1xuKy8qKlxuKyAqIHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soKSAtIHdyaXRlIHBhZ2UgZm9yIFlUODgyNFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHBhZ2U6IHJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcdHJldCBcdTAwMjY9IH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuK1x0cmV0IHw9IChwYWdlIFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCk7XG4rXG4rZXJyOlxuK1x0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLyoqXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC02MjIsMTUgKzcxOCwxMDU3IEBAIHN0YXRpYyBpbnQgeXRwaHlfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpXG4gXHRcdG1hc2sgPSBZVFBIWV9XQ1JfRU5BQkxFIHwgWVRQSFlfV0NSX0lOVFJfU0VMO1xuIFx0XHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVRQSFlfV09MX0NPTkZJR19SRUcsIG1hc2ssIDApO1xuIFxuLVx0XHQvKiBEaXNhYmxlIFdPTCBpbnRlcnJ1cHQgKi9cbi1cdFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsXG4tXHRcdFx0XHQgICBZVFBIWV9JRVJfV09MLCAwKTtcbitcdFx0LyogRGlzYWJsZSBXT0wgaW50ZXJydXB0ICovXG4rXHRcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLFxuK1x0XHRcdFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0fVxuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2VcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1xuKyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcbitcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIG9sZF9wYWdlO1xuK1xuK1x0cmV0dXJuIG9sZF9wYWdlIFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuK307XG4rXG4rLyoqXG4rICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcGFnZTogUmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHR1MTYgZGF0YTtcbitcbitcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIG9sZF9wYWdlO1xuK1x0ZGF0YSA9IG9sZF9wYWdlIFx1MDAyNiAofllUODgyNF9SU1NSX1NQQUNFX01BU0spO1xuK1x0ZGF0YSB8PSBwYWdlO1xuK1xuK1x0cmV0dXJuIHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpO1xuK307XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBpbnZhbGlkIHRlc3QgbW9kZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4rXHRcdChwaHlkZXYsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBlbmFibGUgc2RzIGlzb2xhdGUgKi9cbitcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUsIEJNQ1JfSVNPTEFURSk7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdC8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqL1xuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgVVRQIHNvZnRyZXNldC5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1x0aW50IHZhbDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCwgQk1DUl9SRVNFVCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0Lyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi9cbitcdHJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLCAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbitcdFx0XHRcdFx0ICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZVxuKyAqIGFuZCBzZHMgc29mdHJlc2V0LlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xuK1x0aW50IHZhbCA9IDA7XG4rXHRpbnQgcmV0ID0gLTE7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBzZHMgc29mdHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGUgKi9cbitcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9JU09MQVRFLFxuK1x0XHRcdCAgIEJNQ1JfUkVTRVQgXHUwMDI2IH5CTUNSX0lTT0xBVEUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovXG4rXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChfX3BoeV9yZWFkLCB2YWwsXG4rXHRcdFx0XHQodmFsIFx1MDAzYyAwKSB8fCAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksIDUwMDAwLCA2MDAwMDAsXG4rXHRcdFx0XHR0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldCA9IHZhbDtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cygpIC0gY2FsbGVkIHRvIGRvIHN0b3JlIHdvcmtpbmcgc3RhdHVzXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmV0OiBvcGVyYXRpb24ncyByZXR1cm4gY29kZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmV0KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHI7XG4rXG4rXHQvKiBjb25maWd1cmUgbm9ybWFsIHRlc3QgbW9kZSAqL1xuK1x0ciA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSAhPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHIgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0XHRyZXQgPSByO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldHVybiByZXQ7XG4rcmV0cnk6XG4rXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCB2YWwgPSAwO1xuK1x0aW50IHI7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiBwb3dlciBkb3duICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIHBsbCBjYWxpYnJhdGlvbiAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemF0aW9uIHV0cCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBlbmFibGUgbmliYmxlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDAwMDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIGlkbGUgZXJyIGRldGVjdCBlbmFibGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM1OSwgMHgyMTQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDBjLCAweGMxYTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIDIuNUcgdGVtcGxhdGUgdG9uZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIG9wdGltaXplZCAxMDAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNDAsIDB4MzAxZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNzFmLCAweDAwMzYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmIsIDB4MTgxOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMTBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgRU1DIENTICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGM4LCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YSwgMHg0MGZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0LyogcmVzZXQgKi9cbitcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4rXHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuK1x0XHRcdFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4rXG4rXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbitcdFx0XHRcdFx0ICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3Jlc3RvcmU6XG4rXHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0cmV0dXJuIHJldDtcbitcbitlcnJfcmVzdG9yZV9ub3JtYWw6XG4rXHRyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXG4rXHRcdFx0XHRcdCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwpO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHNkcyBpbml0XG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4rXHRpbnQgdmFsXzEsIHZhbF8yLCB2YWxfMywgdG1wO1xuK1x0aW50IHJldCA9IC0xO1xuK1x0aW50IHZhbDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIHJlYWQgZWZ1c2UgKi9cbitcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRlbHNlXG4rXHRcdHZhbF8xID0gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGVsc2VcbitcdFx0dmFsXzIgPSByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0ZWxzZVxuK1x0XHR2YWxfMyA9IHJldDtcbitcbitcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiZSwgMHgwMDBkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIGFuYWxvZyBDRFIgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIG9wdGltaXplZCBWQ08gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xuK1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MjkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4rXHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNykgfCBCSVQoNikpKSBcdTAwM2VcdTAwM2UgNjtcbitcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgXHUwMDI2PSB+KEJJVCgxKSB8IEJJVCgwKSk7XG4rXHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNSkgfCBCSVQoNCkpKSBcdTAwM2VcdTAwM2UgNDtcbitcdHJldCB8PSB0bXA7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbitcdHRtcCA9ICh2YWxfMyBcdTAwMjYgKEJJVCgxKSB8IEJJVCgwKSkpO1xuK1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYiwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzYSwgMHgxMDA2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0Y2QsIDB4MDAwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBTZXJkZXMgTERPICovXG4rXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgXHUwMDI2PSB+KEJJVCg2KSB8IEJJVCg1KSB8IEJJVCg0KSk7XG4rXHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKSBcdTAwM2VcdTAwM2UgMjtcbitcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA0KTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNSwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCBcdTAwMjY9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7XG4rXHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpKSBcdTAwM2VcdTAwM2UgNTtcbitcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA4KTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIG9wdGltaXplZCBTZXJkZXMgUlggKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4ZSwgMHg3ZDAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwZCwgMHgwNjA2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIFNlcmRlcyBtYW51YWwgY29uZmlnICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcdTAwM2UgOCAqL1xuK1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9SRVNWMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLO1xuK1x0cmV0IHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7XG4rXHRyZXQgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogcmVzZXQgc2VyZGVzICovXG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4rXHRcdFx0ICAgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrOyBfX3BoeV9yZWFkIHRha2VzIG5vIGxvY2sgKi9cbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCxcbitcdFx0XHRcdCh2YWwgXHUwMDNjIDApIHx8ICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSwgNTAwMDAsIDYwMDAwMCxcbitcdFx0XHRcdHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0cmV0ID0gdmFsO1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1x0aW50IHZhbCA9IDA7XG4rXHRpbnQgciA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgxLCAweDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIHBvd2VyIGRvd24gKi9cbitcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4Myk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHg4Myk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogMi41RyB0ZW1wYXRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2UsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdmLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODEsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzQwLCAweDMwMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIDEwMDAgcGVyZm9ybWFuY2UgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhmOCwgMHhiM2ZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZSwgMHg1MzA4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMiwgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiAxMDAgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZlLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZiwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcxLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIDEwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NzFmLCAweDM2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiAxMCB0ZW1wYXRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIDEwIHRlbXBhdGUgTUFVKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY4LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiBFTUMgQ1MsIEluY29uc2lzdGVudCB3aXRoIGV4dGVybmFsIHBoeSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YzgsIDB4ZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhiZSwgMHg2NDA2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogRU1DIFJFKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4NmUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbitcdC8qIHJlc2V0ICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuK1x0XHRcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbitcdHJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXG4rXHRcdFx0XHRcdCAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9yZXN0b3JlOlxuK1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldHVybiByZXQ7XG4rXG4rZXJyX3Jlc3RvcmVfbm9ybWFsOlxuK1x0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuK1x0XHRcdFx0XHQgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfaW5pdCgpIC0gcGh5IGluaXRpYWxpemF0aW9pblxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0cmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldik7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbiBcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4gXG4tZXJyX3Jlc3RvcmVfcGFnZTpcbi1cdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCIlcyBkb25lLCBwaHkgYWRkcjogJWRcXG5cIiwgX19mdW5jX18sXG4rXHRcdCAgIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK1x0cmV0dXJuIHJldDtcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5AQCAtMzEwNCw2ICs0MjQyLDQxOCBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuKy8qKlxuKyAqIHl0ODgyNF9nZXRfZmVhdHVyZXMgLSByZWFkIG1tZCByZWdpc3RlciB0byBnZXQgMi41RyBjYXBhYmlsaXR5XG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcdHJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTtcbitcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCBsaW5rID0gMDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXG4rXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRsaW5rID0gISEocmV0IFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XG4rXG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcXG5cIiwgX19mdW5jX18sXG4rXHRcdCAgIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xuK1x0cmV0dXJuIGxpbms7XG4rZXJyOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBsaW5rID0gMDtcbitcdGludCByZXQgPSAwO1xuK1x0aW50IHZhbCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBnZW5waHlfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcbitcdFx0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX2xwYShwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHZhbCA9IHJldDtcbitcbitcdGxpbmsgPSB2YWwgXHUwMDI2IFlUUEhZX1NTUl9MSU5LO1xuK1x0aWYgKGxpbmspXG4rXHRcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcbitcbitcdGlmIChsaW5rKSB7XG4rXHRcdGlmIChwaHlkZXYtXHUwMDNlbGluayA9PSAwKVxuK1x0XHRcdHBoeWRldl9kYmcocGh5ZGV2LCBcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmsgdXBcXG5cIixcbitcdFx0XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAxO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKHBoeWRldi1cdTAwM2VsaW5rID09IDEpXG4rXHRcdFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFwiJXMsIHBoeSBhZGRyOiAlZCwgbGluayBkb3duXFxuXCIsXG4rXHRcdFx0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4rXHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbitcdH1cbitcdHBoeV9yZXNvbHZlX2FuZWdfcGF1c2UocGh5ZGV2KTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXhcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKCk6IHV0cCBwb3dlciBvbi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOIHwgQk1DUl9JU09MQVRFLCAweDApO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcG93ZXJfb24oKSAgLSBzZXQgdXRwIHBvd2VyIG9uLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcdGludCByO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0XHQvKiB1dHAgcG93ZXIgb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiB1dHAgcG93ZXIgb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbityZXRyeTpcbitcdC8qXG4rXHQgKiBJZiB0aGUgUEhZIHVwIG9wZXJhdGlvbiBzdWNjZWVkcyBidXQgdGhlIHN1YnNlcXVlbnQgb3BlcmF0aW9uXG4rXHQgKiBmYWlscywgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IHN0YXRlLlxuK1x0ICovXG4rXHRyID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHl0ODgyNF9wb3dlcl9vbihwaHlkZXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXHRpbnQgcjtcbitcbitcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHV0cCBwb3dlciBkb3duICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbityZXRyeTpcbitcdC8qXG4rXHQgKiBJZiB0aGUgUEhZIGRvd24gb3BlcmF0aW9uIHN1Y2NlZWRzIGJ1dCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb25cbitcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4rXHQgKi9cbitcdHIgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zdXNwZW5kKCkgLSBzdXNwZW5kIHRoZSBoYXJkd2FyZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2FuZWcoKSAtIGNvbmZpZyBuZWdvdGlhdGlvblxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHBoeV9jdHJsID0gMDtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4rXHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbitcdFx0cGh5X2N0cmwgPSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RztcbitcbitcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMLFxuK1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RywgcGh5X2N0cmwpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXG4rXHRyZXQgPSBfX2dlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYsIHJldCk7XG4rXG4rZXJyOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UoKSAgLSBpbml0IHBoeSBwYWNrYWdlIGZvciBwaHk4ODI0LlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoIXByaXYgfHwgIW5wKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIiVzOiBtaXNzaW5nIHNoYXJlZCBwcml2IG9yIERUIG5vZGVcXG5cIixcbitcdFx0XHQgICBfX2Z1bmNfXyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1x0LyogSW5pdGlhbGlzZSBzaGFyZWQgbG9jayBmb3IgWVQ4ODI0ICovXG4rXHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmVzID0gb2ZfZ2V0X3BoeV9tb2RlKG5wLCBcdTAwMjZwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlKTtcbitcdGlmIChyZXMgXHUwMDNjIDApIHtcbitcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcIiVzLCBwaHktbW9kZSBtaXNzaW5nIGluIERUUy5cXG5cIiwgX19mdW5jX18pO1xuK1x0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbkBAIC0zMTkwLDEzICs0NzQwLDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbiBcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbiBcdH0sXG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcbitcdFx0Lm5hbWUgPSBcIllUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcIixcbitcdFx0LmdldF9mZWF0dXJlcyA9IHl0ODgyNF9nZXRfZmVhdHVyZXMsXG4rXHRcdC5yZWFkX3BhZ2UgPSB5dDg4MjRfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZSA9IHl0ODgyNF93cml0ZV9wYWdlLFxuK1x0XHQucHJvYmUgPSB5dDg4MjRfcHJvYmUsXG4rXHRcdC5jb25maWdfYW5lZyA9IHl0ODgyNF9jb25maWdfYW5lZyxcbitcdFx0LmFuZWdfZG9uZSA9IHl0ODgyNF9hbmVnX2RvbmUsXG4rXHRcdC5jb25maWdfaW5pdCA9IHl0ODgyNF9jb25maWdfaW5pdCxcbitcdFx0LnJlYWRfc3RhdHVzID0geXQ4ODI0X3JlYWRfc3RhdHVzLFxuK1x0XHQuc29mdF9yZXNldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0LFxuK1x0XHQuc3VzcGVuZCA9IHl0ODgyNF9zdXNwZW5kLFxuK1x0XHQucmVzdW1lID0geXQ4ODI0X3Jlc3VtZSxcbitcdH0sXG4gfTtcbiBcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJQZXRlciBHZWlzXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJGcmFua1wiKTtcbitNT0RVTEVfQVVUSE9SKFwiS3lsZVwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbkBAIC0zMjA2LDYgKzQ3NzIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXG4rXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuaW5kZXggODcwOTIwMzExZjlhMC4uZjhlMDNkM2FmYTQ1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbkBAIC0xNDA4LDYgKzE0MDgsMzAgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XG4gXG4rLyoqXG4rICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnNcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcbisgKlxuKyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSAoZS5nLiByZWdpc3RlclxuKyAqIHJlYWQvd3JpdGUgZXJyb3IpLlxuKyAqL1xuK2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpXG4re1xuK1x0aW50IGN0cmw7XG4rXG4rXHRpZiAodGVzdF9tb2RlIFx1MDAzYyBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwgfHxcbitcdCAgICB0ZXN0X21vZGUgXHUwMDNlIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzcpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGN0cmwgPSBGSUVMRF9QUkVQKE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIHRlc3RfbW9kZSk7XG4rXHRyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFLFxuK1x0XHRcdCAgICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIGN0cmwpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcbitcbiAvKipcbiAgKiBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyAtIGdldCBQTENBIGNvbmZpZ3VyYXRpb24gZnJvbSBzdGFuZGFyZCByZWdpc3RlcnNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggM2Q4YWZlNmI3ZjFjNS4uZmI4MjdjYzNjOThmNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMzU3LDYgKzIzNTcsNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTtcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XG4gaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0ICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTtcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuaW5kZXggMDZmNGJjM2MyMGM3MS4uMzUzY2ExM2M2NGZjYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbkBAIC02Myw2ICs2Myw3IEBAXG4gLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0xcdDEzMFx0LyogMTBHQkFTRS1UIHBhaXIgc3dhcCBcdTAwMjYgcG9sYXJpdHkgKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RYUFdSXHQxMzFcdC8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzIgLyogVGVzdCBtb2RlIGNvbnRyb2wgKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NOUlx0MTMzXHQvKiAxMEdCQVNFLVQgU05SIG1hcmdpbiwgbGFuZSBBLlxuIFx0XHRcdFx0XHQgKiBMYW5lcyBCLUQgYXJlIG51bWJlcmVkIDEzNC0xMzYuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0NTUlx0MTQ3XHQvKiAxMEdCQVNFLVIgZmFzdCByZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCAqL1xuQEAgLTMyMCw2ICszMjEsMTcgQEBcbiAvKiBQTUEgMTBHQkFTRS1SIEZhc3QgUmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXIuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRVx0MHgwMDAxXHQvKiBGYXN0IHJldHJhaW4gZW5hYmxlICovXG4gXG4rLyogUE1BIDEwR0JBU0UtVCBUZW1wbGF0ZSBUZXN0IE1vZGUgUmVnaXN0ZXIqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSyBHRU5NQVNLKDE1LCAxMykgLyogVGVtcGxhdGUgdGVzdCBtb2RlICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwgMHgwIC8qIFRlbXBsYXRlIE5vcm1hbCAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSAweDEgLyogVGVtcGxhdGUgVGVzdE1vZGUxICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yIDB4MiAvKiBUZW1wbGF0ZSBUZXN0TW9kZTIgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzMgMHgzIC8qIFRlbXBsYXRlIFRlc3RNb2RlMyAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNCAweDQgLyogVGVtcGxhdGUgVGVzdE1vZGU0ICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81IDB4NSAvKiBUZW1wbGF0ZSBUZXN0TW9kZTUgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzYgMHg2IC8qIFRlbXBsYXRlIFRlc3RNb2RlNiAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNyAweDcgLyogVGVtcGxhdGUgVGVzdE1vZGU3ICovXG4rXG4gLyogUENTIDEwR0JBU0UtUi8tVCBzdGF0dXMgcmVnaXN0ZXIgMS4gKi9cbiAjZGVmaW5lIE1ESU9fUENTXzEwR0JSVF9TVEFUMV9CTEtMS1x0MHgwMDAxXHQvKiBCbG9jayBsb2NrIGF0dGFpbmVkICovXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDo1OTo1MS4yMjU5NTQ2OTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODU4Njc4NDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzOiBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICpkb2VzKi4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlOlxuXG4xLiAgKipEZXZpY2V0cmVlIGJpbmRpbmdzOioqIEEgbmV3IGJpbmRpbmcgZGVmaW5pdGlvbiBmb3IgdGhlIGBtb3RvcmNvbW0seXQ4ODI0YCBkZXZpY2UuIE9rYXksIHN0YW5kYXJkIHN0dWZmIGZvciBkZXZpY2UgZGlzY292ZXJ5LlxuMi4gICoqS2NvbmZpZyB1cGRhdGU6KiogIEVuYWJsaW5nIHN1cHBvcnQgZm9yIHRoZSBZVDg4MjQgUEhZIHdpdGhpbiB0aGUgYFBIWV9QQUNLQUdFYCBmcmFtZXdvcmsuIFRoaXMgc3VnZ2VzdHMgYSBtb2R1bGFyIGRlc2lnbiwgd2hpY2ggaXMgZ29vZC5cbjMuICAqKkNvcmUgZHJpdmVyIGltcGxlbWVudGF0aW9uOioqIFRoZSBtZWF0IG9mIHRoZSBwYXRjaDogYSBuZXcgYG1vdG9yY29tbS5jYCBkcml2ZXIgd2l0aCBhIHRvbiBvZiBuZXcgZnVuY3Rpb25zLCBpbmNsdWRpbmcgc3BlY2lmaWMgcmVhZC93cml0ZSBvcGVyYXRpb25zIChwYWdlZCBhbmQgdW5wYWdlZCksIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uLCBwb3dlciBtYW5hZ2VtZW50LCBhdXRvLW5lZ290aWF0aW9uLCBhbmQgc3RhdHVzIHJlYWQgZnVuY3Rpb25zLiAgVGhleSBzZWVtIHF1aXRlIGxvdyBsZXZlbC4gVGhlcmUncyBhbHNvIGEgbW9kaWZpY2F0aW9uIHRvIGB5dHBoeV9zZXRfd29sYCB3aXRoIGEgY3JpdGljYWwgY2hlY2sgYWRkZWQsIHdoaWNoIGlzIGdvb2Q6IGVuc3VyZXMgdGhhdCBhIGZhaWx1cmUgaW4gdGhlIG1vZGlmaWNhdGlvbiBmdW5jdGlvbiBjb3JyZWN0bHkgcmV0dXJucyB0aGUgZXJyb3IuXG40LiAgKipwaHktYzQ1LmMgdXBkYXRlOioqIEFkZGl0aW9uIG9mIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCwgd2hpY2ggc3VnZ2VzdHMgc29tZSBnZW5lcmljIHRlc3QgbW9kZSBmdW5jdGlvbmFsaXR5LCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmb3IgZmF1bHQgaW5qZWN0aW9uLlxuNS4gICoqSGVhZGVyIHVwZGF0ZXM6KiogRnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgbWFjcm9zIGFkZGVkIGluIGBwaHkuaGAgYW5kIGBtZGlvLmhgLiBTdGFuZGFyZCBzdHVmZiwgbmVjZXNzYXJ5IGZvciB0aGUgbmV3IGRyaXZlci5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogKnJlYWNoYWJpbGl0eSouIENhbiB3ZSBhY3R1YWxseSAqaGl0KiB0aGlzIGNvZGUgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50PyAgU3BlY2lmaWNhbGx5LCB0aGUgTW90b3Jjb21tIFlUODgyNCBpcyBhIFBIWSwgYSBwaHlzaWNhbCBsYXllciBkZXZpY2UuIFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyB0aGUgODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci4gVGhpcyBtZWFucyBpdCBpbnRlcmFjdHMgd2l0aCBhbiBFdGhlcm5ldCBQSFkgb24gYSBNRElPIGJ1cyBvciBkZXZpY2UgdHJlZS4gIFRoZSBxdWVzdGlvbiBpcyBjYW4gd2UgaW5zdGFudGlhdGUgdGhlc2U/IENhbiB3ZSBlbXVsYXRlIHRoaXMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IGxpa2UgU3l6a2FsbGVyIG9yIFFFTVUgd2l0aG91dCBuZWVkaW5nIGFjdHVhbCBoYXJkd2FyZT9cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEhvdyBkb2VzIHRoZSBrZXJuZWwgcHJvYmUgZm9yIHRoZXNlIFBIWSBkZXZpY2VzPyAgQXJlIHRoZXJlIHZpcnR1YWwgb3IgbW9jayBNRElPIGJ1cyBpbXBsZW1lbnRhdGlvbnMgd2UgY291bGQgbGV2ZXJhZ2U/IENhbiB3ZSBjcmVhdGUgYW4gTURJTyBidXMgb3IgUEhZIGRldmljZSB2aWEgbmV0bGluaywgYSB2aXJ0dWFsIGJ1cywgb3IgZXZlbiBVU0I/ICBUaGUga2V5IGlzIHRvIGZpZ3VyZSBvdXQgaWYgd2UgY2FuICptb2NrKiB0aGUgZXhpc3RlbmNlIG9mIHRoaXMgaGFyZHdhcmUgb3IsIGZhaWxpbmcgdGhhdCwgaWYgU3l6a2FsbGVyIG9mZmVycyBhbnkgc3VwcG9ydCBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBQSFkgb3IgTURJTyBkZXZpY2VzLiBJIG5lZWQgdG8gc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIGFuZCBTeXprYWxsZXIgZG9jdW1lbnRhdGlvbiB0byBkZXRlcm1pbmUgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5MjcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowMDowOS44MTI3NDA1MjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MzE2NzU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM9OTMxPXN0YXRpYyBpbnQgeGdiZV9waHlfZmluZF9waHlfZGV2aWNlKHN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTc1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6OTc2OlxcdHJldCA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTk3Ny1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzo5Nzg6XFx0XFx0bmV0ZGV2X2VycihwZGF0YS1cXHUwMDNlbmV0ZGV2LCBcXFwicGh5X2RldmljZV9yZWdpc3RlciBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTc5LVxcdFxcdHBoeV9kZXZpY2VfZnJlZShwaHlkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYz03MTY9aG5zX21hY19yZWdpc3Rlcl9waHlkZXYoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBobnNfbWFjX2NiICptYWNfY2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jLTc0NC1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jOjc0NTpcXHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jLTc0Ni1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYz0xOTI5PXN0YXRpYyBpbnQgbmV0c2VjX3JlZ2lzdGVyX21kaW8oc3RydWN0IG5ldHNlY19wcml2ICpwcml2LCB1MzIgcGh5X2FkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmMtMTk4My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6MTk4NDpcXHRcXHRyZXQgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHByaXYtXFx1MDAzZXBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jLTE5ODUtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jLTE5ODgtXFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jOjE5ODk6XFx0XFx0XFx0XFx0XFxcInBoeV9kZXZpY2VfcmVnaXN0ZXIgZXJyKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmMtMTk5MC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM9NDI9Zndub2RlX2ZpbmRfbWlpX3RpbWVzdGFtcGVyKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtNjktXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjcwOmludCBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy03MS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMDMtXFx0ICovXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjEwNDpcXHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTA1LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTExNC19XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjExNTpFWFBPUlRfU1lNQk9MKGZ3bm9kZV9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTYtXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTExNz1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTQ5LVxcdFxcdC8qIEFsbCBkYXRhIGlzIG5vdyBzdG9yZWQgaW4gdGhlIHBoeSBzdHJ1Y3QsIHNvIHJlZ2lzdGVyIGl0ICovXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1MDpcXHRcXHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTUxLVxcdFxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1Ni1cXHR9IGVsc2UgaWYgKGlzX29mX25vZGUoY2hpbGQpKSB7XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1NzpcXHRcXHRyYyA9IGZ3bm9kZV9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoYnVzLCBwaHksIGNoaWxkLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTU4LVxcdFxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby14Z2VuZS5jPTI2Mz1zdHJ1Y3QgcGh5X2RldmljZSAqeGdlbmVfZW5ldF9waHlfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmMtMjcwLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby14Z2VuZS5jOjI3MTpcXHRpZiAocGh5X2RldmljZV9yZWdpc3RlcihwaHlfZGV2KSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8teGdlbmUuYy0yNzItXFx0XFx0cGh5X2RldmljZV9mcmVlKHBoeV9kZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9MzI9c3RhdGljIGludCBvZl9nZXRfcGh5X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCB1MzIgKnBoeV9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTM2LVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjM3OmludCBvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMzgtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwgdTMyIGFkZHIpXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMzkte1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQwOlxcdHJldHVybiBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKG1kaW8sIHBoeSxcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00MS1cXHRcXHRcXHRcXHRcXHRcXHQgIG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDMtfVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQ0OkVYUE9SVF9TWU1CT0wob2ZfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz0xMzE9c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE2Mi1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTYzOlxcdHJldCA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTY0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTQwOD1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00MzctXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDM4OlxcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00MzktXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTUxPXN0YXRpYyB2b2lkIHRqYTExMDJfcDFfcmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTk3LVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjU5ODpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoYnVzLCBwaHksIGNoaWxkLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTktXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTAzPUVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTA1LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwNjogKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTA3LSAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwOC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDk6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMTAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQxLX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNDI6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDgtICogVGhpcyBkb2Vzbid0IGZyZWUgdGhlIHBoeV9kZXZpY2UgaXRzZWxmLCBpdCBtZXJlbHkgcmV2ZXJzZXMgdGhlIGVmZmVjdHNcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNDk6ICogb2YgcGh5X2RldmljZV9yZWdpc3RlcigpLiBVc2UgcGh5X2RldmljZV9mcmVlKCkgdG8gZnJlZSB0aGUgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTUwLSAqIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0yMTA1PXN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX3BoeShzdHJ1Y3Qgc2ZwICpzZnAsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMTIwLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMTIxOlxcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjEyMi1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIxMjMtXFx0XFx0cGh5X2RldmljZV9mcmVlKHBoeSk7XFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIxMjQ6XFx0XFx0ZGV2X2VycihzZnAtXFx1MDAzZWRldiwgXFxcInBoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIxMjUtXFx0XFx0XFx0RVJSX1BUUihlcnIpKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfRldOT0RFX01ESU8pXFxuaW5jbHVkZS9saW51eC9md25vZGVfbWRpby5oOjEyOmludCBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xMy1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaD0xNj1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmgtMTktI2Vsc2UgLyogQ09ORklHX0ZXTk9ERV9NRElPICovXFxuaW5jbHVkZS9saW51eC9md25vZGVfbWRpby5oOjIwOmludCBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0yMS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oPTQ5PWJvb2wgb2ZfcGh5X2lzX2ZpeGVkX2xpbmsoc3RydWN0IGRldmljZV9ub2RlICpucCk7XFxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmg6NTA6aW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC01MS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaD0xNDA9c3RhdGljIGlubGluZSBib29sIG9mX3BoeV9pc19maXhlZF9saW5rKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC0xNDQtXFxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmg6MTQ1OnN0YXRpYyBpbmxpbmUgaW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC0xNDYtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIxNzc9c3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSk7XFxuaW5jbHVkZS9saW51eC9waHkuaDoyMTc4OmludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xcbmluY2x1ZGUvbGludXgvcGh5LmgtMjE3OS12b2lkIHBoeV9kZXZpY2VfZnJlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDA6MTEuMzc1OTE2NTAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ3ODY1Njc4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBQSFkgRHJpdmVyIE1hdGNoaW5nIGFuZCBQcm9iaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGEgUEhZIGRyaXZlciwgc3BlY2lmaWNhbGx5IG9uZSBkZXNpZ25lZCBmb3Igc29tZXRoaW5nIGxpa2UgYSBNb3RvcmNvbW0gWVQ4ODI0LCBhY3R1YWxseSBnZXRzIG1hdGNoZWQgYW5kIHByb2JlZCBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZ1bmRhbWVudGFsIGZsb3cuIFJpZ2h0LCBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCwgdGhlIGtleSBmdW5jdGlvbnMgYXJlIGBwaHlfYnVzX21hdGNoYCBhbmQgYHBoeV9wcm9iZWAuIE5vdywgZm9yIGRyaXZlcnMgbGlrZSB0aGUgYG1vdG9yY29tbV9waHlfZHJ2c2AsIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgbWF0Y2hpbmcgcHJvY2VzcyByZWxpZXMgb24gaWRlbnRpZnlpbmcgdGhlIFBIWSBiYXNlZCBvbiBpdHMgYHBoeV9pZGAuIFNwZWNpZmljYWxseSwgaXQgdXNlcyBzb21ldGhpbmcgbGlrZSBgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpYC4gVGhhdCdzIHRoZSBkcml2ZXIncyB1bmlxdWUgaWRlbnRpZmllci5cblxuQnV0IGhlcmUncyB3aGVyZSBJIG5lZWQgdG8gY2xhcmlmeSB0aGluZ3MuIFdoZXJlIGV4YWN0bHkgZG9lcyB0aGlzIGBwaHlkZXZgIHN0cnVjdHVyZSBvcmlnaW5hdGUgZnJvbT8gSSBiZWxpZXZlIGl0J3MgZWl0aGVyIHRocm91Z2ggYW4gTURJTyBidXMgc2Nhbm5pbmcgcHJvY2Vzcywgb3IgcG90ZW50aWFsbHkgZnJvbSBhIGRldmljZSB0cmVlIHJlZ2lzdHJhdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy5cblxuTm93LCBteSByZWFsIHF1ZXN0aW9uIGlzIHJlZ2FyZGluZyB0aGUgdGVzdGluZyBlbnZpcm9ubWVudC4gRG9lcyBRRU1VLCBvciBldmVuIHRoZSBkcmVhZGVkIHN5emthbGxlciwgcHJvdmlkZSBhIHJlYWxpc3RpYyBzY2VuYXJpbyB3aXRoIGFuIE1ESU8gYnVzIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgYW4gYWN0dWFsIE1vdG9yY29tbSBZVDg4MjQgUEhZIGNoaXAgdGhhdCBJIGNhbiBpbnRlcmFjdCB3aXRoPyBJdCdzIGEgbG9uZyBzaG90LCBidXQgbWF5YmUuLi4gV2FpdCBhIG1pbnV0ZS4uLiBDb3VsZCBVU0IgbmV0IG9yIFVTQiBFdGhlcm5ldCBhZGFwdGVycyBwb3RlbnRpYWxseSBleHBvc2Ugb3IgdXRpbGl6ZSBNRElPIGJ1c2VzPyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEl0J3MgYSBsb25nIHNob3QsIGJ1dCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYW55IHBvdGVudGlhbCBVU0IgZGV2aWNlcyB0aGF0IG1pZ2h0IHV0aWxpemUgcGh5bGliIG9yIGFuIE1ESU8gYnVzLiBJIHNob3VsZCBsb29rIGludG8gdGhvc2UgZHJpdmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2MjAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDA6MjYuMTYyNDg2MDUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjk4MTQ5NzEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9idXNfcmVnaXN0ZXIuKnVzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDA6MjguMzMyMzEwNzA0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjYyNDc2OTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZCwgc3BlYWtpbmcgZGlyZWN0bHkgdG8gYW5vdGhlciBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVVNCIE5ldHdvcmsgRHJpdmVyIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGRyaXZlcnMvbmV0L3VzYiBhcmVhLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgbmV0d29yayBhc3BlY3QgdGhhdCB1dGlsaXplcyBVU0IgY29ubmVjdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgdG8gcGlucG9pbnQgYW55IHBvdGVudGlhbCB0cm91YmxlIHNwb3RzIG9yIGFyZWFzIHJpcGUgZm9yIG9wdGltaXphdGlvbiB3aXRoaW4gdGhpcyBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIGltcGxlbWVudGF0aW9uLCBtYWtpbmcgc3VyZSBpdCBhbGlnbnMgd2l0aCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgbmV0d29yayBkYXRhIGV4Y2hhbmdlIGFuZCBkYXRhIHRyYW5zZmVyLiBBbnkgaXJyZWd1bGFyaXRpZXMgaGVyZT8gQ29tcGF0aWJpbGl0eSBpc3N1ZXM/IExldOKAmXMgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgd2FudCB0byBjaGVjayBmb3IgZWZmaWNpZW50IHJlc291cmNlIG1hbmFnZW1lbnQsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgb3IgcmFjZSBjb25kaXRpb25zLiBLbm93aW5nIHRoZSBhcmNoaXRlY3R1cmUgb2YgbmV0d29yayBkYXRhIG1hbmFnZW1lbnQgaW5zaWRlIGEgVVNCIGNvbm5lY3Rpb24gaXMgbXkgcHJpb3JpdHkuIExldCdzIHN0YXJ0IHRoZSBldmFsdWF0aW9uIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExODgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowMDozMC45NTcwODIzMDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2Mzg3MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2RldmljZXxtZGlvYnVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeC5oPTE3OD1zdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE4NS1cXHRzdHJ1Y3QgbWlpX2J1cyAqbWRpbztcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjE4NjpcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTg3OlxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfaW50O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTg4LVxcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTY2OT1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02NzMtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY3NDpcXHRwcml2LVxcdTAwM2VtZGlvID0gbWRpb2J1c19hbGxvYygpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02NzUtXFx0aWYgKCFwcml2LVxcdTAwM2VtZGlvKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njg3OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OC1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OS1cXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiQ291bGQgbm90IHJlZ2lzdGVyIE1ESU8gYnVzIChlcnIgJWQpXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2OTA6XFx0XFx0bWRpb2J1c19mcmVlKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02OTEtXFx0XFx0cHJpdi1cXHUwMDNlbWRpbyA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9Njk3PXN0YXRpYyB2b2lkIGF4ODg3NzJfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2KVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02OTgte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2OTk6XFx0bWRpb2J1c191bnJlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo3MDA6XFx0bWRpb2J1c19mcmVlKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MDEtfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTcwMz1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9waHkoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcwNy1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzA4OlxcdHByaXYtXFx1MDAzZXBoeWRldiA9IG1kaW9idXNfZ2V0X3BoeShwcml2LVxcdTAwM2VtZGlvLCBwcml2LVxcdTAwM2VwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcwOS1cXHRpZiAoIXByaXYtXFx1MDAzZXBoeWRldikge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTczMS1cXHQgKi9cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzMyOlxcdHByaXYtXFx1MDAzZXBoeWRldl9pbnQgPSBtZGlvYnVzX2dldF9waHkocHJpdi1cXHUwMDNlbWRpbywgQVhfRU1CRF9QSFlfQUREUik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTczMy1cXHRpZiAoIXByaXYtXFx1MDAzZXBoeWRldl9pbnQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz03NjI9c3RhdGljIHZvaWQgYXg4ODc3Ml9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzYzOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03NjQtXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MTg9c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUge1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTE5LVxcdHN0cnVjdCBtaWlfYnVzICptZGlvO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjIwOlxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMjEtXFx0Y2hhciBwaHlfbmFtZVtQSFlfSURfU0laRV07XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0yOT1zdGF0aWMgdm9pZCBheDg4MTcyYV9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTMwLXtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzozMTpcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gbmV0ZGV2LVxcdTAwM2VwaHlkZXY7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzItXFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTYxPXN0YXRpYyBpbnQgYXg4ODE3MmFfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTY1LVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjY2OlxcdHByaXYtXFx1MDAzZW1kaW8gPSBtZGlvYnVzX2FsbG9jKCk7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtNjctXFx0aWYgKCFwcml2LVxcdTAwM2VtZGlvKSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03OS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo4MDpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTgxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTg5LW1mcmVlOlxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjkwOlxcdG1kaW9idXNfZnJlZShwcml2LVxcdTAwM2VtZGlvKTtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy05MS1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9OTQ9c3RhdGljIHZvaWQgYXg4ODE3MmFfcmVtb3ZlX21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtOTgtXFx0bmV0ZGV2X2luZm8oZGV2LVxcdTAwM2VuZXQsIFxcXCJkZXJlZ2lzdGVyaW5nIG1kaW8gYnVzICVzXFxcXG5cXFwiLCBwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2VpZCk7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6OTk6XFx0bWRpb2J1c191bnJlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjEwMDpcXHRtZGlvYnVzX2ZyZWUocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMTAxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9NDEzPXN0cnVjdCBsYW43OHh4X25ldCB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ0MS1cXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRkZXZfbXV0ZXg7IC8qIHNlcmlhbGlzZSBvcGVuL3N0b3Agd3J0IHN1c3BlbmQvcmVzdW1lICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzo0NDI6XFx0c3RydWN0IG11dGV4XFx0XFx0bWRpb2J1c19tdXRleDsgLyogZm9yIE1ESU8gYnVzIGFjY2VzcyAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtNDQzLVxcdHVuc2lnbmVkIGludFxcdFxcdHBpcGVfaW4sIHBpcGVfb3V0LCBwaXBlX2ludHI7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ1OC1cXHR1MzJcXHRcXHRcXHRjaGlwcmV2O1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6NDU5OlxcdHN0cnVjdCBtaWlfYnVzXFx0XFx0Km1kaW9idXM7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy00NjAtXFx0cGh5X2ludGVyZmFjZV90XFx0XFx0aW50ZXJmYWNlO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz05NDY9c3RhdGljIGludCBsYW43OHh4X2ZsdXNoX3J4X2ZpZm8oc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTk1MC1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjk1MTovKiBMb29wIHVudGlsIHRoZSByZWFkIGlzIGNvbXBsZXRlZCB3aXRoIHRpbWVvdXQgY2FsbGVkIHdpdGggbWRpb2J1c19tdXRleCBoZWxkICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzo5NTI6c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTk1My17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTE1ODI9c3RhdGljIGludCBsYW43OHh4X21hY19yZXNldChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU4Ny1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjE1ODg6XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VtZGlvYnVzX211dGV4KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTE1ODktXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTE1OTMtXFx0ICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoxNTk0OlxcdHJldCA9IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNTk1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNjIyLWV4aXRfdW5sb2NrOlxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MTYyMzpcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlbWRpb2J1c19tdXRleCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNjI0LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0xOTQ0PXN0YXRpYyBpbnQgbGFuNzh4eF9pbml0X21hY19hZGRyZXNzKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDExLS8qIE1ESU8gcmVhZCBhbmQgd3JpdGUgd3JhcHBlcnMgZm9yIHBoeWxpYiAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjAxMjpzdGF0aWMgaW50IGxhbjc4eHhfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBpZHgpXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDEzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAyMS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwMjI6XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VtZGlvYnVzX211dGV4KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMjMtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDI0LVxcdC8qIGNvbmZpcm0gTUlJIG5vdCBidXN5ICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDI1OlxcdHJldCA9IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDI2LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDM0LVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjAzNTpcXHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAzNi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA0NS1kb25lOlxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA0NjpcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlbWRpb2J1c19tdXRleCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDQ3LVxcdHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtXFx1MDAzZWludGYpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDUxLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA1MjpzdGF0aWMgaW50IGxhbjc4eHhfbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4LFxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA1My1cXHRcXHRcXHRcXHQgdTE2IHJlZ3ZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA2Mi1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwNjM6XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VtZGlvYnVzX211dGV4KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNjQtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDY1LVxcdC8qIGNvbmZpcm0gTUlJIG5vdCBidXN5ICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDY2OlxcdHJldCA9IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDY3LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDgwLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA4MTpcXHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4Mi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4NS1kb25lOlxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA4NjpcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlbWRpb2J1c19tdXRleCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDg3LVxcdHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtXFx1MDAzZWludGYpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yMDkxPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvX2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwOTUtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDk2OlxcdGRldi1cXHUwMDNlbWRpb2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwOTc6XFx0aWYgKCFkZXYtXFx1MDAzZW1kaW9idXMpIHtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwOTgtXFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcImNhbid0IGFsbG9jYXRlIE1ESU8gYnVzXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEwMS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDI6XFx0ZGV2LVxcdTAwM2VtZGlvYnVzLVxcdTAwM2Vwcml2ID0gKHZvaWQgKilkZXY7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTAzOlxcdGRldi1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlcmVhZCA9IGxhbjc4eHhfbWRpb2J1c19yZWFkO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwNDpcXHRkZXYtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXdyaXRlID0gbGFuNzh4eF9tZGlvYnVzX3dyaXRlO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwNTpcXHRkZXYtXFx1MDAzZW1kaW9idXMtXFx1MDAzZW5hbWUgPSBcXFwibGFuNzh4eC1tZGlvYnVzXFxcIjtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDY6XFx0ZGV2LVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VwYXJlbnQgPSBcXHUwMDI2ZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXY7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTA3LVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwODpcXHRzbnByaW50ZihkZXYtXFx1MDAzZW1kaW9idXMtXFx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFxcXCJ1c2ItJTAzZDolMDNkXFxcIixcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMDktXFx0XFx0IGRldi1cXHUwMDNldWRldi1cXHUwMDNlYnVzLVxcdTAwM2VidXNudW0sIGRldi1cXHUwMDNldWRldi1cXHUwMDNlZGV2bnVtKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjExNC1cXHRcXHQvKiBzZXQgdG8gaW50ZXJuYWwgUEhZIGlkICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTE1OlxcdFxcdGRldi1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlcGh5X21hc2sgPSB+KDEgXFx1MDAzY1xcdTAwM2MgMSk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTE2LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIxLVxcdG5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldi5vZl9ub2RlLCBcXFwibWRpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEyMjpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cXHUwMDNlbWRpb2J1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIzLVxcdG9mX25vZGVfcHV0KG5vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTI4LVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEyOTpcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwicmVnaXN0ZXJlZCBtZGlvYnVzIGJ1cyAlc1xcXFxuXFxcIiwgZGV2LVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VpZCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTMwLVxcdHJldHVybiAwO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEzMS1leGl0MTpcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMzI6XFx0bWRpb2J1c19mcmVlKGRldi1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTMzLVxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTIxMzY9c3RhdGljIHZvaWQgbGFuNzh4eF9yZW1vdmVfbWRpbyhzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMzcte1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEzODpcXHRtZGlvYnVzX3VucmVnaXN0ZXIoZGV2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMzk6XFx0bWRpb2J1c19mcmVlKGRldi1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTQwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjQ3Nz1zdGF0aWMgdm9pZCBsYW43OHh4X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjQ3ODpcXHRcXHRcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjQ3OS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjYyNj1zdGF0aWMgaW50IGxhbjc4eHhfc2V0X2ZpeGVkX2xpbmsoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI2NDgtICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyNjQ5OnN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbGFuNzh4eF9nZXRfcGh5KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjY1MC17XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyNjUxOlxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yNjUyLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjY1My1cXHQvKiBBdHRlbXB0IHRvIGxvY2F0ZSBhIFBIWSBvbiB0aGUgTURJTyBidXMgKi9cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjI2NTQ6XFx0cGh5ZGV2ID0gcGh5X2ZpbmRfZmlyc3QoZGV2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI2NTUtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTI3Njk9c3RhdGljIGludCBsYW43OHh4X2NvbmZpZ3VyZV9sZWRzX2Zyb21fZHQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYsXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyNzcwOlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI3NzEte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yODU4PXN0YXRpYyBpbnQgbGFuNzh4eF9waHlfaW5pdChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI4NTkte1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6Mjg2MDpcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjg2MS1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yOTA0LVxcdFxcdG5ldGRldl9lcnIoZGV2LVxcdTAwM2VuZXQsIFxcXCJjYW4ndCBhdHRhY2ggUEhZIHRvICVzLCBlcnJvciAlcGVcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyOTA1OlxcdFxcdFxcdCAgIGRldi1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlaWQsIEVSUl9QVFIocmV0KSk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yOTA2LVxcdFxcdGdvdG8gcGh5bGlua191bmluaXQ7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTQ2NTU9c3RhdGljIGludCBsYW43OHh4X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy00Njg4LVxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlcnhxX292ZXJmbG93KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjQ2ODk6XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VtZGlvYnVzX211dGV4KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ2OTAtXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfbXV0ZXgpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9NjA9c3RydWN0IHNtc2M5NXh4X3ByaXYge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtNzQtXFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmlycWZ3bm9kZTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzo3NTpcXHRzdHJ1Y3QgbWlpX2J1cyAqbWRpb2J1cztcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzo3NjpcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTc3LVxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcG1fdGFzaztcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTIxOD1zdGF0aWMgdm9pZCBzbXNjOTV4eF9tZGlvX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IHBoeV9pZCwgaW50IGlkeCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTI1OS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoyNjA6c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMjYxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTI5Ni1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoyOTc6c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeClcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0yOTgte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMzAzLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjMwNDpzdGF0aWMgaW50IHNtc2M5NXh4X21kaW9idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeCxcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0zMDUtXFx0XFx0XFx0XFx0ICB1MTYgcmVndmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9Nzk4PXN0YXRpYyBpbnQgc21zYzk1eHhfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy04MDItXFx0c3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjgwMzpcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTgwNC1cXHRzdHJ1Y3QgdXNibmV0ICpkZXY7XFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xMTQ3PXN0YXRpYyBpbnQgc21zYzk1eHhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTIxNy1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjE4OlxcdHBkYXRhLVxcdTAwM2VtZGlvYnVzID0gbWRpb2J1c19hbGxvYygpO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMTk6XFx0aWYgKCFwZGF0YS1cXHUwMDNlbWRpb2J1cykge1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyMjAtXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyMjktXFx0aWYgKHBkYXRhLVxcdTAwM2Vpc19pbnRlcm5hbF9waHkpXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTIzMDpcXHRcXHRwZGF0YS1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlcGh5X21hc2sgPSB+KDF1IFxcdTAwM2NcXHUwMDNjIFNNU0M5NVhYX0lOVEVSTkFMX1BIWV9JRCk7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTIzMS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjMyOlxcdHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2Vwcml2ID0gZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzM6XFx0cGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXJlYWQgPSBzbXNjOTV4eF9tZGlvYnVzX3JlYWQ7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTIzNDpcXHRwZGF0YS1cXHUwMDNlbWRpb2J1cy1cXHUwMDNld3JpdGUgPSBzbXNjOTV4eF9tZGlvYnVzX3dyaXRlO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzU6XFx0cGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXJlc2V0ID0gc21zYzk1eHhfbWRpb2J1c19yZXNldDtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjM2OlxcdHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VuYW1lID0gXFxcInNtc2M5NXh4LW1kaW9idXNcXFwiO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzc6XFx0cGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXBhcmVudCA9IFxcdTAwMjZkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjM4LVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzk6XFx0c25wcmludGYocGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZWlkLCBBUlJBWV9TSVpFKHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VpZCksXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0MC1cXHRcXHQgXFxcInVzYi0lMDNkOiUwM2RcXFwiLCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWJ1cy1cXHUwMDNlYnVzbnVtLCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldm51bSk7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0MS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjQyOlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocGRhdGEtXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDMtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0Ny1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjQ4OlxcdHBkYXRhLVxcdTAwM2VwaHlkZXYgPSBwaHlfZmluZF9maXJzdChwZGF0YS1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0OS1cXHRpZiAoIXBkYXRhLVxcdTAwM2VwaHlkZXYpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyODgtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyODk6XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcImNhbid0IGF0dGFjaCBQSFkgdG8gJXNcXFxcblxcXCIsIHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VpZCk7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI5MC1cXHRcXHRnb3RvIHVucmVnaXN0ZXJfbWRpbztcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyOTctdW5yZWdpc3Rlcl9tZGlvOlxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyOTg6XFx0bWRpb2J1c191bnJlZ2lzdGVyKHBkYXRhLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjk5LVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEzMDAtZnJlZV9tZGlvOlxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEzMDE6XFx0bWRpb2J1c19mcmVlKHBkYXRhLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMzAyLVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTMxNz1zdGF0aWMgdm9pZCBzbXNjOTV4eF91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEzMjEtXFx0cGh5X2Rpc2Nvbm5lY3QoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXBoeWRldik7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTMyMjpcXHRtZGlvYnVzX3VucmVnaXN0ZXIocGRhdGEtXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEzMjM6XFx0bWRpb2J1c19mcmVlKHBkYXRhLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMzI0LVxcdGlycV9kaXNwb3NlX21hcHBpbmcoaXJxX2ZpbmRfbWFwcGluZyhwZGF0YS1cXHUwMDNlaXJxZG9tYWluLCBQSFlfSFdJUlEpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDA6MzEuMDAzNzI3MjU0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDUyMzk0NTAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIElucXVpcnk6IFVTQiBHYWRnZXQgRW11bGF0aW9uIGFuZCBQSFkgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgc29tZXRoaW5nIHJlZ2FyZGluZyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBpZiB0aGUgYHJhd19nYWRnZXRgIGRyaXZlciBjYW4gZWZmZWN0aXZlbHkgZW11bGF0ZSBhIFVTQi10by1FdGhlcm5ldCBhZGFwdGVyIGxpa2UgYW4gQVNJWCBBWDg4MTcyQSwgU01TQzk1eHgsIG9yIGV2ZW4gYW4gQVNJWC1iYXNlZCBkZXZpY2UgbGlrZSB0aGUgTEFONzh4eC5cblxuSWYgc28sIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBJZiBJJ20gc3VjY2Vzc2Z1bGx5IGVtdWxhdGluZyBvbmUgb2YgdGhlc2UgdmlhIGByYXdfZ2FkZ2V0YCBhbmQgdXNpbmcgdGhlIGBkdW1teV9oY2RgLCB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgTURJTyBidXMgY29tZXMgaW50byBwbGF5PyBSaWdodCwgdGhlIGRldmljZSByZWdpc3RlcnMgYW4gTURJTyBidXMgd2l0aCBgbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW8pYC5cblxuSSBoYXZlIHRvIGRpdmUgZGVlcGVyIGludG8gYG1kaW9idXNfcmVnaXN0ZXJgLCBlc3BlY2lhbGx5IHRoZSBgbWRpb2J1c19zY2FuYCBmdW5jdGlvbi4gQXMgSSByZWNhbGwsIHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSB0cmllcyB0byBkZXRlcm1pbmUgd2hhdCdzIG9uIHRoZSBNRElPIGJ1cyBieSByZWFkaW5nIGBNSUlfUEhZU0lEMWAgYW5kIGBNSUlfUEhZU0lEMmAgdXNpbmcgdGhlIGBidXMtXHUwMDNlcmVhZCgpYCBmdW5jdGlvbi4gVGhpcyBnZXRzIG1lIHRoaW5raW5nLi4uXG5cbk5vdywgaGVyZSdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdoYXQgaWYgdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgKnJlc3BvbmRzKiB3aXRoIGFyYml0cmFyeSB2YWx1ZXMgZHVyaW5nIHRoZSBgbWRpb2J1c19zY2FuYD8gTGV0J3Mgc2F5LCBpdCByZXR1cm5zIGEgUEhZIElELCBsaWtlIHRoZSBvbmUgZm9yIGEgWVQ4ODI0LCB3aGljaCBpcyBgUEhZX0lEX1lUODgyNGAgKDB4NGY1MWU4YjgpLiBJcyB0aGF0IHBvc3NpYmxlPyBJdCBzaG91bGQgYmUhXG5cbldhaXQgYSBtaW51dGUsIGxldCBtZSBwdWxsIHVwIHRoZSBjb2RlIGZvciBgeXQ4ODI0X3Byb2JlYCFcblxuYGBgY1xuc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbntcblx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcblx0aW50IHJldDtcblxuXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcblx0aWYgKHJldClcblx0XHRyZXR1cm4gcmV0O1xuXG5cdGlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHtcblx0XHRyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpO1xuXHRcdGlmIChyZXQpXG5cdFx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0cmV0dXJuIDA7XG59XG5gYGBcblxuT2theSwgdGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCB0aGF0IGxpbmUgYGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO2AuIFRoaXMgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gIGlzIGRvaW5nLiBUaGlzIHNlZW1zIHRvIGJlIHRoZSBrZXkgc3RlcCBpbiBoYW5kbGluZyB0aGUgUEhZIGFzc29jaWF0aW9uLiBGcm9tIGhlcmUgSSBuZWVkIHRvIGxvb2sgYXQgd2hhdCBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCBkb2VzIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgUEhZIElELCBhbmQgdGhlbiBob3cgdGhhdCBpbXBhY3RzIHRoZSBlbnRpcmUgZW11bGF0ZWQgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODI2OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowMDozNS41Mjc2NzQ5OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDgxMTMyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bV9vZl9waHlfcGFja2FnZV9qb2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz00NjM4PXN0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDY0My1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6NDY0NDpcXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDY0NS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM9NDA1PUVYUE9SVF9TWU1CT0xfR1BMKGRldm1fcGh5X3BhY2thZ2Vfam9pbik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy00MDctLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM6NDA4OiAqIGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbiAtIHJlc291cmNlIG1hbmFnZWQgb2ZfcGh5X3BhY2thZ2Vfam9pbigpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDA5LSAqIEBkZXY6IGRldmljZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoaXMgUEhZIHBhY2thZ2VcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTQxNi0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYzo0MTc6aW50IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDE4LVxcdFxcdFxcdCAgICAgc2l6ZV90IHByaXZfc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTQzOC19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM6NDM5OkVYUE9SVF9TWU1CT0xfR1BMKGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDQwLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oPTMyPWludCBkZXZtX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaC0zMy1cXHRcXHRcXHQgIGludCBiYXNlX2FkZHIsIHNpemVfdCBwcml2X3NpemUpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaDozNDppbnQgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvcGh5bGliLmgtMzUtXFx0XFx0XFx0ICAgICBzaXplX3QgcHJpdl9zaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYz02OTQ9c3RhdGljIGludCBxY2E4MDd4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNzAxLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo3MDI6XFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTcwMy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYz0xOTU9c3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYy0yMzUtXFxuZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYzoyMzY6XFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCAwKTtcXG5kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jLTIzNy1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowMDozNy4wMzU3OTQ2MzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTY3NjQ0NTgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbmAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBncmFiIHRoYXQgYGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbmAgZnVuY3Rpb24gZnJvbSBgZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmNgIHVzaW5nIHRoZSByZWFkLWZpbGUgY29tbWFuZC4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZXZpY2UtbWFuYWdlZCBQSFkgcGFja2FnZSBqb2luaW5nIHByb2Nlc3Mgd29ya3MuIEkgd2FudCB0byBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBhc3NvY2lhdGluZyBQSFlzIHdpdGggdGhlIHJlbGV2YW50IGRldmljZXMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IG1hbmFnZXMgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHdoZW4gUEhZIHBhY2thZ2VzIGFyZSBpbnRlZ3JhdGVkLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDE3MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjAwOjQyLjcxMjI0MzA0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDU6XFx0RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9waHlfcGFja2FnZV9qb2luKTtcXG4gNDA2OlxcdFxcbiA0MDc6XFx0LyoqXFxuIDQwODpcXHQgKiBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4gLSByZXNvdXJjZSBtYW5hZ2VkIG9mX3BoeV9wYWNrYWdlX2pvaW4oKVxcbiA0MDk6XFx0ICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhpcyBQSFkgcGFja2FnZVxcbiA0MTA6XFx0ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuIDQxMTpcXHQgKiBAcHJpdl9zaXplOiBpZiBub24temVybyBhbGxvY2F0ZSB0aGlzIGFtb3VudCBvZiBieXRlcyBmb3IgcHJpdmF0ZSBkYXRhXFxuIDQxMjpcXHQgKlxcbiA0MTM6XFx0ICogTWFuYWdlZCBvZl9waHlfcGFja2FnZV9qb2luKCkuIFNoYXJlZCBzdG9yYWdlIGZldGNoZWQgYnkgdGhpcyBmdW5jdGlvbixcXG4gNDE0OlxcdCAqIHBoeV9wYWNrYWdlX2xlYXZlKCkgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgb24gZHJpdmVyIGRldGFjaC4gU2VlXFxuIDQxNTpcXHQgKiBvZl9waHlfcGFja2FnZV9qb2luKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuIDQxNjpcXHQgKi9cXG4gNDE3OlxcdGludCBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbiA0MTg6XFx0XFx0XFx0XFx0ICAgICBzaXplX3QgcHJpdl9zaXplKVxcbiA0MTk6XFx0e1xcbiA0MjA6XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKipwdHI7XFxuIDQyMTpcXHRcXHRpbnQgcmV0O1xcbiA0MjI6XFx0XFxuIDQyMzpcXHRcXHRwdHIgPSBkZXZyZXNfYWxsb2MoZGV2bV9waHlfcGFja2FnZV9sZWF2ZSwgc2l6ZW9mKCpwdHIpLFxcbiA0MjQ6XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCk7XFxuIDQyNTpcXHRcXHRpZiAoIXB0cilcXG4gNDI2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0Mjc6XFx0XFxuIDQyODpcXHRcXHRyZXQgPSBvZl9waHlfcGFja2FnZV9qb2luKHBoeWRldiwgcHJpdl9zaXplKTtcXG4gNDI5OlxcdFxcbiA0MzA6XFx0XFx0aWYgKCFyZXQpIHtcXG4gNDMxOlxcdFxcdFxcdCpwdHIgPSBwaHlkZXY7XFxuIDQzMjpcXHRcXHRcXHRkZXZyZXNfYWRkKGRldiwgcHRyKTtcXG4gNDMzOlxcdFxcdH0gZWxzZSB7XFxuIDQzNDpcXHRcXHRcXHRkZXZyZXNfZnJlZShwdHIpO1xcbiA0MzU6XFx0XFx0fVxcbiA0MzY6XFx0XFxuIDQzNzpcXHRcXHRyZXR1cm4gcmV0O1xcbiA0Mzg6XFx0fVxcbiA0Mzk6XFx0RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKTtcXG4gNDQwOlxcdFxcbiA0NDE6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJQSFkgcGFja2FnZSBzdXBwb3J0XFxcIik7XFxuIDQ0MjpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjAwOjQyLjcxMjMxOTk5MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTUzMDkwMjk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYG9mX3BoeV9wYWNrYWdlX2pvaW5gIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYG9mX3BoeV9wYWNrYWdlX2pvaW5gLCB3aGF0J3MgKnRoYXQqIGFib3V0P1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBpdCBwcm9iYWJseSByZWxhdGVzIHRvIHNvbWUgZnVuZGFtZW50YWwgYXNwZWN0IG9mIHRoZSBQSFkgbGF5ZXIsIHBlcmhhcHMgZGVhbGluZyB3aXRoIHRoZSBhZ2dyZWdhdGlvbiwgZGVhZ2dyZWdhdGlvbiwgb3IgY29vcmRpbmF0aW9uIG9mIHBoeXNpY2FsIGxheWVyIGRhdGEgdW5pdHMuIEdpdmVuIHRoZSBuYW1lLCBcImpvaW5cIiBpcyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIHdpbGwgaW52b2x2ZSBzb21lIGZvcm0gb2YgYXNzZW1ibHkgb3IgY29tYmluaW5nIG9mIGVsZW1lbnRzLiBJcyBpdCByZWxhdGVkIHRvIGJ1cnN0IGFzc2VtYmx5LCBmcmFtZSBjb25jYXRlbmF0aW9uLCBwZXJoYXBzIHNvbWUgaGlnaGVyLWxldmVsIG11bHRpcGxleGluZyBzY2hlbWU/IFRoZSBgb2ZgIHByZWZpeCBzdWdnZXN0cyBpdCdzIGEgcGFydCBvZiBPcGVuRmxvdywgc28gSSBzaG91bGQgYmUgbG9va2luZyBhdCBob3cgdGhpcyBmaXRzIHdpdGhpbiB0aGUgT3BlbkZsb3cgcHJvdG9jb2wncyBhYnN0cmFjdGlvbiBvZiB0aGUgUEhZIGxheWVyLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgT3BlbkZsb3cgc3BlY2lmaWNhdGlvbnMgYW5kIGhvdyBQSFkgaW50ZXJhY3Rpb25zIGFyZSB0eXBpY2FsbHkgaGFuZGxlZCBpbiB0aGlzIGVudmlyb25tZW50LiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBXaGVyZSBkb2VzIHRoaXMgZnVuY3Rpb24gZ2V0IGNhbGxlZD8gQW5kLCBjcml0aWNhbGx5LCB3aGF0IGFyZSB0aGUgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gZGF0YSBmbG93cyB0aGlzIGZ1bmN0aW9uIGltcGFjdHM/IFJpZ2h0LCBJIG5lZWQgdG8gbG9vayBpbnRvIGl0IHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW91ciFcblxuXG4iLCJJbnB1dFRva2VucyI6NDA5NjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjAxOjAyLjI0MzIyOTU1OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNDA0NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IG9mX3BoeV9wYWNrYWdlX2pvaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jPTI3Nj1FWFBPUlRfU1lNQk9MX0dQTChwaHlfcGFja2FnZV9qb2luKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTI5Ny0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYzoyOTg6aW50IG9mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc2l6ZV90IHByaXZfc2l6ZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy0yOTkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oPTI5PWludCBwaHlfcGFja2FnZV9qb2luKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBiYXNlX2FkZHIsIHNpemVfdCBwcml2X3NpemUpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaDozMDppbnQgb2ZfcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzaXplX3QgcHJpdl9zaXplKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGliLmgtMzEtdm9pZCBwaHlfcGFja2FnZV9sZWF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDE6MDIuMjkyNTc1NzAxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0ODMxNTc2ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQSFkgUGFja2FnZSBKb2luIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byBwdWxsIHVwIGBkcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuY2AgYW5kIHplcm8gaW4gb24gdGhhdCBgb2ZfcGh5X3BhY2thZ2Vfam9pbmAgZnVuY3Rpb24gYXJvdW5kIGxpbmUgMjk4LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc3lzdGVtIGlzIGhhbmRsaW5nIHRoZSBpbnRlZ3JhdGlvbiBvZiB0aGVzZSBQSFkgcGFja2FnZXMsIHBhcnRpY3VsYXJseSB3aXRoIHRoZSBkZXZpY2UgdHJlZSBpbnRlZ3JhdGlvbi4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBjb3JlIG9mIGJyaW5naW5nIHRoZXNlIFBIWXMgaW50byB0aGUgc3lzdGVtIGFmdGVyIHRoZXkndmUgYmVlbiBkZXNjcmliZWQgYnkgdGhlIGRldmljZSB0cmVlLiBJJ20gbG9va2luZyBmb3IgdGhlIHJlZ2lzdHJhdGlvbiwgYmluZGluZywgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoaXMgbGlrZWx5IGhhbmRsZXMgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBQSFkgZHJpdmVyIGl0c2VsZiBhbmQgdGhlIGRldmljZSB0cmVlIGluZm9ybWF0aW9uLiBJJ20gY3VyaW91cyBpZiBpdCdzIHJlc3BvbnNpYmxlIGZvciByZXNvdXJjZSBhbGxvY2F0aW9uLCBJUlEgc2V0dXAsIG9yIHByb2JpbmcgdGhlIFBIWSdzIGNhcGFiaWxpdGllcyBiYXNlZCBvbiB3aGF0J3MgZGVjbGFyZWQgaW4gdGhlIGRldmljZSB0cmVlIG5vZGUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgZXhhY3RseSBob3cgaXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTEzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDE6MDUuNzc1NzM1ODMxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTU6XFx0ICogbm9kZSBpcyBub3QgZGV0ZWN0ZWQgb3IgaXMgbm90IHZhbGlkIG9yIGRvZXNuJ3QgbWF0Y2ggdGhlIGV4cGVjdGVkIG5vZGVcXG4gMjk2OlxcdCAqIG5hbWUgZm9yIFBIWSBwYWNrYWdlLlxcbiAyOTc6XFx0ICovXFxuIDI5ODpcXHRpbnQgb2ZfcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzaXplX3QgcHJpdl9zaXplKVxcbiAyOTk6XFx0e1xcbiAzMDA6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xcbiAzMDE6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7XFxuIDMwMjpcXHRcXHR1MzIgYmFzZV9hZGRyO1xcbiAzMDM6XFx0XFx0aW50IHJldDtcXG4gMzA0OlxcdFxcbiAzMDU6XFx0XFx0aWYgKCFub2RlKVxcbiAzMDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdFxcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XFxuIDMwOTpcXHRcXHRpZiAoIXBhY2thZ2Vfbm9kZSlcXG4gMzEwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMTE6XFx0XFxuIDMxMjpcXHRcXHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFxcXCJldGhlcm5ldC1waHktcGFja2FnZVxcXCIpKSB7XFxuIDMxMzpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiAzMTQ6XFx0XFx0XFx0Z290byBleGl0O1xcbiAzMTU6XFx0XFx0fVxcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIocGFja2FnZV9ub2RlLCBcXFwicmVnXFxcIiwgXFx1MDAyNmJhc2VfYWRkcikpIHtcXG4gMzE4OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDMxOTpcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuIDMyMDpcXHRcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdHJldCA9IHBoeV9wYWNrYWdlX2pvaW4ocGh5ZGV2LCBiYXNlX2FkZHIsIHByaXZfc2l6ZSk7XFxuIDMyMzpcXHRcXHRpZiAocmV0KVxcbiAzMjQ6XFx0XFx0XFx0Z290byBleGl0O1xcbiAzMjU6XFx0XFxuIDMyNjpcXHRcXHRwaHlkZXYtXFx1MDAzZXNoYXJlZC1cXHUwMDNlbnAgPSBwYWNrYWdlX25vZGU7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdHJldHVybiAwO1xcbiAzMjk6XFx0ZXhpdDpcXG4gMzMwOlxcdFxcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XFxuIDMzMTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAzMzI6XFx0fVxcbiAzMzM6XFx0RVhQT1JUX1NZTUJPTF9HUEwob2ZfcGh5X3BhY2thZ2Vfam9pbik7XFxuIDMzNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDE6MDUuNzc1ODQwNzkxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc0NjUyMDUwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgb2ZfcGh5X3BhY2thZ2Vfam9pbmAgRnVuY3Rpb24gYW5kIEl0cyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IHRoaXMgYG9mX3BoeV9wYWNrYWdlX2pvaW5gIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0J3MgdXNlZCB3aXRoIGB5dDg4MjRgLiBUaGUgY29kZSBmaXJzdCBncmFicyB0aGUgZGV2aWNlIG5vZGUgZnJvbSBgcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGVgLiBJZiB0aGlzIGlzIE5VTEwsIHdoaWNoIEknbSBhc3N1bWluZyBpcyB0aGUgdHlwaWNhbCBzY2VuYXJpbyB3aXRob3V0IERldmljZVRyZWUgKGxpa2Ugb24geDg2L2FtZDY0IHN5c3RlbXMgd2hlbiB1c2luZyBNRElPIHNjYW5uaW5nIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgVVNCKSwgaXQgaW1tZWRpYXRlbHkgcmV0dXJucyBgLUVJTlZBTGAuXG5cbkFuZCB0aGVuIGxvb2sgYXQgYHl0ODgyNF9wcm9iZWA6ICBJZiBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCByZXR1cm5zIGAtRUlOVkFMYCwgdGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uICppbW1lZGlhdGVseSogcmV0dXJucy4gU28sIGJhc2ljYWxseSwgaWYgdGhlIGRldmljZSBub2RlIGxvb2t1cCBmYWlscywgdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiBqdXN0IGJhaWxzIG91dC4gVGhpcyBtZWFucyBub25lIG9mIHRoZSBgeXQ4ODI0XypgIGZ1bmN0aW9ucyB3aWxsIGV2ZXIgZ2V0IGNhbGxlZCFcblxuTm93LCB0aGUgcXVlc3Rpb24gYmVjb21lczogaXMgRGV2aWNlVHJlZSBldmVuICphdmFpbGFibGUqIG9uIHg4Nl82NCwgZXNwZWNpYWxseSB3aXRoaW4gc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyPyAgTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IG9uIGFtZDY0LCBBQ1BJIGlzIHRoZSBzdGFuZGFyZCBhbmQgT3BlbkZpcm13YXJlL0RldmljZVRyZWUgKGBDT05GSUdfT0ZgKSBpcyB0eXBpY2FsbHkgZGlzYWJsZWQgb3IgYWJzZW50LCBlc3BlY2lhbGx5IHRob3NlIGBldGhlcm5ldC1waHktcGFja2FnZWAgbm9kZXMuIEknbSByZWFzb25hYmx5IHN1cmUgc3l6a2FsbGVyIHJ1bnMgYSBzdGFuZGFyZCBhbWQ2NCBrZXJuZWwgaW4gUUVNVSAqd2l0aG91dCogRFQuXG5cbkp1c3QgdG8gYmUgc3VyZSwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIChgQ09ORklHX09GYCkgb24geDg2L2FtZDY0Li4uIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBpbmRlZWQgZGlzYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMzUwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDE6MTMuMjQxMDQ4NThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTQyODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPRlxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvb2ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9vZi9LY29uZmlnPTg9Y29uZmlnIEJVSUxUSU5fRFRCX0FMTFxcbi0tXFxuZHJpdmVycy9vZi9LY29uZmlnLTEwLVxcbmRyaXZlcnMvb2YvS2NvbmZpZzoxMTptZW51Y29uZmlnIE9GXFxuZHJpdmVycy9vZi9LY29uZmlnLTEyLVxcdGJvb2wgXFxcIkRldmljZSBUcmVlIGFuZCBPcGVuIEZpcm13YXJlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjAxOjEzLjI4ODU5NTc3MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzMzODY1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBNb3RvcmNvbW0gWVQ4ODI0KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZCEgQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyAqcmVhbGx5KiBmdW5kYW1lbnRhbDogaXMgdGhlIE1vdG9yY29tbSBZVDg4MjQgYWN0dWFsbHkgYSBwaHlzaWNhbCBoYXJkd2FyZSBFdGhlcm5ldCBQSFk/IFRoZSBwYXRjaCBkb2N1bWVudGF0aW9uICpzaG91bGQqIGNsYXJpZnkgdGhpcy4gQWgsIGhlcmUgd2UgZ28hIFllcywgdGhlIHBhdGNoIGV4cGxpY2l0bHkgc3RhdGVzOiBcIk1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIGlzIGEgUEhZIHBhY2thZ2Ugb2YgNCBQSFlzLlwiIEV4Y2VsbGVudC4gQW5kIGl0IGNvbnRpbnVlcywgXCJFbmFibGVzIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBuZXR3b3JrIFBIWXMuIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzIGFuZCBZVDg4MjQgNCAqIDIuNUcgUEhZLlwiIFRoYXQncyBnb29kIGNvbmZpcm1hdGlvbi5cblxuTm93LCBhIG5ldyBkZXRhaWwgc3VyZmFjZXMgaW4gdGhlIGNvZGUgd2hpY2ggSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZC4gV2hhdCBhYm91dCB0aGlzIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCB0aGluZyB0aGF0IHdhcyBhZGRlZCBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY2A/IFdoZXJlIGV4YWN0bHkgaXMgdGhhdCBmdW5jdGlvbiBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGtlcm5lbCdzIEV0aGVybmV0IFBIWSBkcml2ZXIgc3RydWN0dXJlPyBUaW1lIHRvIHVzZSBteSBmYXZvcml0ZSB0b29sOiBncmVwcGVyISBJJ2xsIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMzAyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjAxOjE3LjAyMjQ2MzcyMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwOTQwMzE5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz03Nzc9c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg0LVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo3ODU6XFx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg2LVxcdFxcdChwaHlkZXYsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTg0MD1zdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTg0Ny1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6ODQ4OlxcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtODQ5LVxcdFxcdFxcdFxcdFxcdCAgICBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTk3OD1zdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTIzMS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTIzMjpcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSk7XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyMzMtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI0NC1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTI0NTpcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI0Ni1cXHRcXHRcXHRcXHRcXHQgICBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyNTctZXJyX3Jlc3RvcmVfbm9ybWFsOlxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMjU4OlxcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI1OS1cXHRcXHRcXHRcXHRcXHQgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz0xNTE3PXN0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcwMS1cXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNzAyOlxcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xKTtcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcwMy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MTQtXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE3MTU6XFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MTYtXFx0XFx0XFx0XFx0XFx0ICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzI4LWVycl9yZXN0b3JlX25vcm1hbDpcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTcyOTpcXHRyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MzAtXFx0XFx0XFx0XFx0XFx0IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jPTE0MDk9RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDExLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQxMjogKiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIC0gY29uZmlndXJlIHRlbXBsYXRlIHRlc3Rtb2RlIHJlZ2lzdGVyc1xcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQxMy0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQyMC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jOjE0MjE6aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MjIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDMyLX1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jOjE0MzM6RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDM0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaD0yMzU5PWludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XFxuaW5jbHVkZS9saW51eC9waHkuaDoyMzYwOmludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpO1xcbmluY2x1ZGUvbGludXgvcGh5LmgtMjM2MS1pbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDE6MTguNTMxODczNTY5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExMjM1OTY0MDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG1vdG9yY29tbS5jYCBDaGFuZ2VzKipcblxuT2theSwgc28gYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgIGlzICpvbmx5KiBjYWxsZWQgYnkgdGhlIHl0ODgyNCBmdW5jdGlvbnMgaW4gYG1vdG9yY29tbS5jYC4gVGhhdCdzIGdvb2QgdG8ga25vdy4gQnV0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aCBgeXRwaHlfc2V0X3dvbGAgYWxzbyBpbiBgbW90b3Jjb21tLmNgLiBMZXQncyBqdW1wIGludG8gbGluZXMgNjIyLTYzMiBvZiBgbW90b3Jjb21tLmNgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmdW5jdGlvbidzIHN0cnVjdHVyZS4gQWgsIGFuZCB3aGF0IHdhcyB0aGF0IHBhdGNoJ3MgaW1wYWN0IG9uIGB5dHBoeV9zZXRfd29sYD8gVGltZSB0byBwdWxsIHVwIHRoZSBgZ2l0IGRpZmZgIGZvciB0aGF0IGZ1bmN0aW9uIGluIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLlxuXG5IbW0sIHRoaXMgbG9va3MgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIHNpbXBseSBhZGRlZCB0aGUgbGluZSBgaWYgKHJldCBcdTAwM2MgMCkgZ290byBlcnJfcmVzdG9yZV9wYWdlO2AgcmlnaHQgYWZ0ZXIgZGlzYWJsaW5nIHRoZSBXT0wgaW50ZXJydXB0LiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBlcnJvciBoYW5kbGluZyBwcm9jZWR1cmUuIExldCdzIG1ha2Ugc3VyZSwgaG93ZXZlciwgYW5kIHJldmlldyB0aGUgY29kZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjaGFuZ2UgaW4gYHl0cGh5X3NldF93b2xgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTA2MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowMToyOS43Njc4NDA1MzFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFx0XFx0dmFsID0gWVRQSFlfV0NSX0VOQUJMRSB8IFlUUEhZX1dDUl9JTlRSX1NFTDtcXG4gNzAxOlxcdFxcdFxcdHZhbCB8PSBZVFBIWV9XQ1JfVFlQRV9QVUxTRSB8IFlUUEhZX1dDUl9QVUxTRV9XSURUSF82NzJNUztcXG4gNzAyOlxcdFxcdFxcdHJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVFBIWV9XT0xfQ09ORklHX1JFRywgbWFzaywgdmFsKTtcXG4gNzAzOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA3MDQ6XFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbiA3MDU6XFx0XFxuIDcwNjpcXHRcXHRcXHQvKiBFbmFibGUgV09MIGludGVycnVwdCAqL1xcbiA3MDc6XFx0XFx0XFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsIDAsXFxuIDcwODpcXHRcXHRcXHRcXHRcXHQgICBZVFBIWV9JRVJfV09MKTtcXG4gNzA5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA3MTA6XFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbiA3MTE6XFx0XFxuIDcxMjpcXHRcXHR9IGVsc2Uge1xcbiA3MTM6XFx0XFx0XFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg1MjFfUlNTUl9VVFBfU1BBQ0UpO1xcbiA3MTQ6XFx0XFx0XFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4gNzE1OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4gNzE2OlxcdFxcbiA3MTc6XFx0XFx0XFx0LyogRGlzYWJsZSBXT0wgZmVhdHVyZSAqL1xcbiA3MTg6XFx0XFx0XFx0bWFzayA9IFlUUEhZX1dDUl9FTkFCTEUgfCBZVFBIWV9XQ1JfSU5UUl9TRUw7XFxuIDcxOTpcXHRcXHRcXHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVRQSFlfV09MX0NPTkZJR19SRUcsIG1hc2ssIDApO1xcbiA3MjA6XFx0XFxuIDcyMTpcXHRcXHRcXHQvKiBEaXNhYmxlIFdPTCBpbnRlcnJ1cHQgKi9cXG4gNzIyOlxcdFxcdFxcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLFxcbiA3MjM6XFx0XFx0XFx0XFx0XFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XFxuIDcyNDpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNzI1OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4gNzI2OlxcdFxcdH1cXG4gNzI3OlxcdFxcbiA3Mjg6XFx0ZXJyX3Jlc3RvcmVfcGFnZTpcXG4gNzI5OlxcdFxcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuIDczMDpcXHR9XFxuIDczMTpcXHRcXG4gNzMyOlxcdC8qKlxcbiA3MzM6XFx0ICogeXQ4ODI0X3JlYWRfcGFnZSgpIC0gcmVhZCBQSFk4ODI0IHJlZyBwYWdlXFxuIDczNDpcXHQgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4gNzM1OlxcdCAqXFxuIDczNjpcXHQgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvXFxuIDczNzpcXHQgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4gNzM4OlxcdCAqL1xcbiA3Mzk6XFx0c3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjAxOjI5Ljc2ODAyNzE1MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTMzNDMyMDU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYXRjaCBSZWFjaGFiaWxpdHkgaW4gYSBGdXp6aW5nIENvbnRleHQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgdGhlIHBvaW50bGVzcyBhZGRpdGlvbiBpbiBgeXRwaHlfc2V0X3dvbGAuIEVzc2VudGlhbGx5LCBpdCBhZGRlZCBhIGNoZWNrIHRoYXQgd2FzIGFscmVhZHkgaW1wbGljaXRseSB0aGVyZSwgYSBjbGFzc2ljIG5vLW9wLiBCdXQgdGhlIGNvcmUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2AgYXJlIGFjY2Vzc2libGUgdmlhIGZ1enppbmcuXG5cbk15IHByaW1hcnkgY29uY2Vybiwgd2hpY2ggSSBuZWVkIHRvIHJlc29sdmUsIGlzIHdoZXRoZXIgaXQgaXMgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuXCIgSSdtIHZlcnkgZmFtaWxpYXIgd2l0aCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCwgc28gbGV0J3MgdXNlIHRoYXQga25vd2xlZGdlIGhlcmU6IFNwZWNpZmljYWxseSwgd2hldGhlciB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkgZHJpdmVyICpyZXF1aXJlcyogcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpc24ndCBlbXVsYXRlZCBieSB0aGUgc3RhbmRhcmQgUUVNVSBzZXR1cCBJJ20gdGVzdGluZyB3aXRoLlxuXG5JIGtub3cgdGhhdCBQSFkgZHJpdmVycywgYnkgZGVmaW5pdGlvbiwgbWFuYWdlIGV4dGVybmFsIEV0aGVybmV0IHRyYW5zY2VpdmVyIGNoaXBzLiBUaGUgWVQ4ODI0IGlzIHN1Y2ggYSBjaGlwIGZyb20gYSByZWFsIHNlbWljb25kdWN0b3IgY29tcGFueS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IFFFTVUgb24geDg2L2FtZDY0IGVtdWxhdGVzIEludGVsIChlMTAwMC9lMTAwMGUpLCBWaXJ0aW8sIGFuZCBSZWFsdGVrIGhhcmR3YXJlLCBidXQgbm9uZSBvZiB0aGVzZSB1c2UgUEhZcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5IHRoZSBrZXJuZWwncyBwaHlsaWIuIFRoZXJlZm9yZSwgbm8gcGh5c2ljYWwgTURJTyBidXMgKHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBQSFlzKSBpcyBlbXVsYXRlZCwgbWFraW5nIHRoaXMgYW4gaW1tZWRpYXRlIHJlZCBmbGFnLlxuXG5UaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0aGUgdXNlIG9mIERldmljZSBUcmVlIChEVCkuIFRoZSBgeXQ4ODI0X3Byb2JlYCBmdW5jdGlvbiAqZXhwbGljaXRseSogdXNlcyBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCBhbmQgZXhwZWN0cyBhbiBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIgbm9kZSBpbiB0aGUgRFQuIFdpdGhvdXQgRFQsIG9yIGEgc3BlY2lmaWMgRFQgYmluZGluZyBmb3IgYSBtb3RvcmNvbW0gWVQ4ODI0LCB0aGUgcHJvYmUgZmFpbHMgaW1tZWRpYXRlbHkuIEV2ZW4gaWYgYSBtb2NrIE1ESU8gYnVzIHdlcmUgc29tZWhvdyB0cmlnZ2VyZWQsIHRoZSBkcml2ZXIgd291bGQgZmFpbCBhcyB0aGUgT0Ygbm9kZSBpcyBleHBlY3RlZCB0byBiZSBwcmVzZW50LCBhbmQgaXQgaXMgbm90IGluIHRoZSBjb250ZXh0IG9mIGFtZDY0ICsgc3RhbmRhcmQgUUVNVS5cblxuRnVydGhlcm1vcmUsIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCB3aXRoaW4gdGhpcyBkcml2ZXIgYXBwZWFycyB0byBiZSAqZXhjbHVzaXZlbHkqIGNhbGxlZCBieSB0aGlzIGRyaXZlcjsgbm8gb3RoZXIga2VybmVsIGNvZGUgY2FsbHMgaXQuIE1lYW5pbmcgdGhhdCwgdGhpcyBwYXRjaCBpcyBvbmx5IHJlbGV2YW50IHRvIHBoeXNpY2FsIE1vdG9yY29tbSBoYXJkd2FyZSB3aXRoIHNwZWNpZmljIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb25zLlxuXG5UaGUgY2hhbmdlcyBpbiBgeXRwaHlfc2V0X3dvbGAgYXJlIHVsdGltYXRlbHkgaW5jb25zZXF1ZW50aWFsOyB0aGlzIGRyaXZlciBpcyB1bnJlYWNoYWJsZSBhbnl3YXkuIEkgZ3JlcHBlZCB0aGUgY29kZWJhc2UgYW5kIGNvbmZpcm1lZCB0aGF0IGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBpc24ndCBjYWxsZWQgYW55d2hlcmUgZWxzZS5cblxuSGVuY2UsIEkgY29uY2x1ZGUgdGhlIGNoYW5nZXMgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGZ1enppbmcgY29udGV4dC5cblRodXMsICoqV29ydGhGdXp6aW5nID0gZmFsc2UuKipcblxuXG4iLCJJbnB1dFRva2VucyI6NDY1MTEsIk91dHB1dFRva2VucyI6MTkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjAxOjQ5LjEwMjM1MDI5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IHF1YWQtcG9ydCAyLjVHIEV0aGVybmV0IFBIWSBpbiBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYW5kIGFkZHMgYW4gYXNzb2NpYXRlZCBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpbiBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLiBUaGUgbW9kaWZpZWQgY29kZSB0YXJnZXRzIGEgc3BlY2lmaWMgcGh5c2ljYWwgRXRoZXJuZXQgUEhZIHRyYW5zY2VpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIHNwZWNpZmljIERldmljZSBUcmVlIGRlc2NyaXB0aW9uICgnZXRoZXJuZXQtcGh5LXBhY2thZ2UnKSwgd2hpY2ggaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgeDg2XzY0L1FFTVUgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZSBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpcyBzb2xlbHkgY2FsbGVkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLCBhbmQgcHJvYmUgaW1tZWRpYXRlbHkgZmFpbHMgd2l0aG91dCB0aGUgT0Ygbm9kZS4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41RyBFdGhlcm5ldCBQSFkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGFuZCBhZGRzIGFuIGFzc29jaWF0ZWQgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy4gVGhlIG1vZGlmaWVkIGNvZGUgdGFyZ2V0cyBhIHNwZWNpZmljIHBoeXNpY2FsIEV0aGVybmV0IFBIWSB0cmFuc2NlaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBzcGVjaWZpYyBEZXZpY2UgVHJlZSBkZXNjcmlwdGlvbiAoJ2V0aGVybmV0LXBoeS1wYWNrYWdlJyksIHdoaWNoIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9RRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGUgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaXMgc29sZWx5IGNhbGxlZCBieSB0aGUgWVQ4ODI0IGRyaXZlciwgYW5kIHByb2JlIGltbWVkaWF0ZWx5IGZhaWxzIHdpdGhvdXQgdGhlIE9GIG5vZGUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDE6NDkuMTAyMzc1MzkxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8f9l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 10:14:08 +0000 UTC FinishedAt: 2026-09-15 11:01:50 +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+CgkJCTx0ZD4yMDI2LzA5LzE1IDEwOjU5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgcXVhZC1wb3J0IDIuNUcgRXRoZXJuZXQgUEhZIGluIGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBhbmQgYWRkcyBhbiBhc3NvY2lhdGVkIGhlbHBlciBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIGluIGRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMuIFRoZSBtb2RpZmllZCBjb2RlIHRhcmdldHMgYSBzcGVjaWZpYyBwaHlzaWNhbCBFdGhlcm5ldCBQSFkgdHJhbnNjZWl2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgc3BlY2lmaWMgRGV2aWNlIFRyZWUgZGVzY3JpcHRpb24gKCYjMzk7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM5OyksIHdoaWNoIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9RRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGUgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaXMgc29sZWx5IGNhbGxlZCBieSB0aGUgWVQ4ODI0IGRyaXZlciwgYW5kIHByb2JlIGltbWVkaWF0ZWx5IGZhaWxzIHdpdGhvdXQgdGhlIE9GIG5vZGUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFlMzFlYTFhNmI1MmM4NjhiOWM3YTc0OTYxMjg2MWYwYzE3MmJlOWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAxMDo1OTo0OCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTNlOWY3NjU0MDRhM1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcbkBAIC0wLDAgJiM0MzsxLDU5IEBAXG4mIzQzOyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuJiM0MzslWUFNTCAxLjJcbiYjNDM7LS0tXG4mIzQzOyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogTW90b3JDb21tIFlUODgyNCBFdGhlcm5ldCBQSFlcbiYjNDM7XG4mIzQzO21haW50YWluZXJzOlxuJiM0MzsgIC0gS3lsZSBTd2l0Y2ggXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOlxuJiM0MzsgIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIGlzIGEgUEhZIHBhY2thZ2Ugb2YgNCBQSFlzLlxuJiM0MztcbiYjNDM7JHJlZjogZXRoZXJuZXQtcGh5LXBhY2thZ2UueWFtbCNcbiYjNDM7XG4mIzQzO3Byb3BlcnRpZXM6XG4mIzQzOyAgY29tcGF0aWJsZTpcbiYjNDM7ICAgIGVudW06XG4mIzQzOyAgICAgIC0gbW90b3Jjb21tLHl0ODgyNC1wYWNrYWdlXG4mIzQzO1xuJiM0MztyZXF1aXJlZDpcbiYjNDM7ICAtIGNvbXBhdGlibGVcbiYjNDM7ICAtIHBoeS1tb2RlXG4mIzQzOyAgLSByZWdcbiYjNDM7XG4mIzQzO3VuZXZhbHVhdGVkUHJvcGVydGllczogZmFsc2VcbiYjNDM7XG4mIzQzO2V4YW1wbGVzOlxuJiM0MzsgIC0gfFxuJiM0MzsgICAgbWRpbyB7XG4mIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7XG4mIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4mIzQzOyAgICAgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MzsgICAgICAgICAgICBjb21wYXRpYmxlID0gXCYjMzQ7bW90b3Jjb21tLHl0ODgyNC1wYWNrYWdlXCYjMzQ7O1xuJiM0MzsgICAgICAgICAgICByZWcgPSBcdTAwM2M5XHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgcGh5LW1vZGUgPSBcJiMzNDtpbnRlcm5hbFwmIzM0OztcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA0IHtcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzRcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANSB7XG4mIzQzOyAgICAgICAgICAgICAgICByZWcgPSBcdTAwM2M1XHUwMDNlO1xuJiM0MzsgICAgICAgICAgICB9O1xuJiM0MztcbiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDYge1xuJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNlx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgfTtcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA3IHtcbiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9IFx1MDAzYzdcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIH07XG4mIzQzOyAgICAgICAgfTtcbiYjNDM7ICAgIH07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuaW5kZXggZDM4MzU1OTdlMzc5NS4uOTk2ZDc1YWZlZDQ0NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xuQEAgLTM2MSw5ICYjNDM7MzYxLDEwIEBAIGNvbmZpZyBNSUNST1NFTUlfUEhZXG4gXG4gY29uZmlnIE1PVE9SQ09NTV9QSFlcbiBcdHRyaXN0YXRlIFwmIzM0O01vdG9yY29tbSBQSFlzXCYjMzQ7XG4mIzQzO1x0c2VsZWN0IFBIWV9QQUNLQUdFXG4gXHRoZWxwXG4gXHQgIEVuYWJsZXMgc3VwcG9ydCBmb3IgTW90b3Jjb21tIG5ldHdvcmsgUEhZcy5cbi1cdCAgQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMuXG4mIzQzO1x0ICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcyBhbmQgWVQ4ODI0IDQgKiAyLjVHIFBIWS5cbiBcbiBjb25maWcgTkFUSU9OQUxfUEhZXG4gXHR0cmlzdGF0ZSBcJiMzNDtOYXRpb25hbCBTZW1pY29uZHVjdG9yIFBIWXNcJiMzNDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbmluZGV4IDkwYTRmODZmMjc1OGIuLmI2MDk0OGM5Y2U4ODQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuQEAgLTEsMjQgJiM0MzsxLDMxIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAmIzQzO1xuIC8qXG4tICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLlxuJiM0MzsgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cbiAgKlxuICAqIEF1dGhvcjogUGV0ZXIgR2VpcyBcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXHUwMDNlXG4gICogQXV0aG9yOiBGcmFuayBcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cdTAwM2VcbiYjNDM7ICogQXV0aG9yOiBLeWxlIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWRpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvb2YuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuIFxuJiM0MzsjaW5jbHVkZSBcJiMzNDtwaHlsaWIuaFwmIzM0O1xuJiM0MztcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTFcdFx0MHgwMDAwMDEwYVxuICNkZWZpbmUgUEhZX0lEX1lUODUyMVx0XHQweDAwMDAwMTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIyXHRcdDB4NGY1MWU5MjhcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFcdFx0MHg0ZjUxZTkxYlxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVNcdFx0MHg0ZjUxZTkxYVxuICNkZWZpbmUgUEhZX0lEX1lUODgyMVx0XHQweDRmNTFlYTE5XG4mIzQzOyNkZWZpbmUgUEhZX0lEX1lUODgyNFx0XHQweDRmNTFlOGI4XG4gLyogWVQ4NTIxL1lUODUzMVMvWVQ4ODIxIFJlZ2lzdGVyIE92ZXJ2aWV3XG4gICpcdFVUUCBSZWdpc3RlciBzcGFjZVx0fFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5AQCAtMzAsNiAmIzQzOzM3LDE4IEBAXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAqL1xuIFxuJiM0MzsvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcbiYjNDM7ICogVVRQIFJlZ2lzdGVyIHNwYWNlIHwgVVNYR01JSSBSZWdpc3RlciBzcGFjZVxuJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIHwgVVRQIE1JSVx0XHR8IFVTWEdNSUkgTUlJXHRcdHxcbiYjNDM7ICogfCBVVFAgTU1EXHRcdHxcdFx0XHR8XG4mIzQzOyAqIHwgVVRQIEV4dGVuZGVkXHR8IFVTWEdNSUkgRXh0ZW5kZWRcdHxcbiYjNDM7ICogfCBVVFAgVG9wIEV4dGVuZGVkXHR8IFVTWEdNSUkgVG9wIEV4dGVuZGVkXHR8XG4mIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICogfCAgIENvbW1vbiBUb3AgRXh0ZW5kZWRcdFx0XHR8XG4mIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICovXG4mIzQzO1xuIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovXG4gXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuQEAgLTM4MSw2ICYjNDM7NDAwLDEzIEBAXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0FVVE9fQlgyNTAwX1NHTUlJXHQwXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFx0XHQxXG4gXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTS1x0XHRcdEJJVCgwKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0VcdFx0KDB4MSlcbiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcdFx0XHQoMHgwKVxuJiM0MzsjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1x0XHRHRU5NQVNLKDMsIDApXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRVx0XHRcdEJJVCgxMylcbiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX1RYX1BSRV9QQURESU5HXHRcdCgweDcpXG4mIzQzO1xuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHQvKiBjb21ib19hZHZlcnRpc2luZyBpcyB1c2VkIGZvciBjYXNlIG9mIFlUODUyMSBpbiBjb21ibyBtb2RlLFxuIFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXG5AQCAtMzk5LDYgJiM0Mzs0MjUsMTIgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdHU4IHJlZ19wYWdlO1xuIH07XG4gXG4mIzQzO3N0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYge1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2VfbW9kZTtcbiYjNDM7XHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUHMgb3BlcmF0aW9uIGlzb2xhdGlvbiBkdXJpbmcgc3dhcCByZWcgc3BhY2UgKi9cbiYjNDM7XHRzdHJ1Y3QgbXV0ZXggc2hhcmVkX2xvY2s7XG4mIzQzO307XG4mIzQzO1xuIC8qKlxuICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJiMzOTtzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC00MzcsNiAmIzQzOzQ2OSw3MCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiB5dHBoeV9yZWFkX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1x0cmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gX19waHlfcGFja2FnZV9yZWFkKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byB3cml0ZVxuJiM0MzsgKiBAdmFsOiByZWdpc3RlciB2YWwgdG8gd3JpdGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSxcbiYjNDM7XHRcdFx0ICAgICAgIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNnBoeWRldi1cdTAwM2VtZGlvLmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldCA9IF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHBhZ2U6IHJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyO1xuJiM0MztcdHJldCBcdTAwMjY9IH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuJiM0MztcdHJldCB8PSAocGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0KTtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC02MjIsMTUgJiM0Mzs3MTgsMTA1NyBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxuIFx0XHRtYXNrID0gWVRQSFlfV0NSX0VOQUJMRSB8IFlUUEhZX1dDUl9JTlRSX1NFTDtcbiBcdFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUUEhZX1dPTF9DT05GSUdfUkVHLCBtYXNrLCAwKTtcbiBcbi1cdFx0LyogRGlzYWJsZSBXT0wgaW50ZXJydXB0ICovXG4tXHRcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLFxuLVx0XHRcdFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XG4mIzQzO1x0XHQvKiBEaXNhYmxlIFdPTCBpbnRlcnJ1cHQgKi9cbiYjNDM7XHRcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLFxuJiM0MztcdFx0XHRcdCAgIFlUUEhZX0lFUl9XT0wsIDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgUEhZODgyNCByZWcgcGFnZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvXG4mIzQzOyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBvbGRfcGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfd3JpdGVfcGFnZSgpIC0gd3JpdGUgcmVnIHBhZ2VcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogQHBhZ2U6IFJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdHUxNiBkYXRhO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIG9sZF9wYWdlO1xuJiM0MztcdGRhdGEgPSBvbGRfcGFnZSBcdTAwMjYgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcbiYjNDM7XHRkYXRhIHw9IHBhZ2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCBkYXRhKTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIGludmFsaWQgdGVzdCBtb2RlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4mIzQzO1x0XHQocGh5ZGV2LCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZCgpIC0gZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogZW5hYmxlIHNkcyBpc29sYXRlICovXG4mIzQzO1x0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfSVNPTEFURSwgQk1DUl9JU09MQVRFKTtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IFVUUCBzb2Z0cmVzZXQuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VULCBCTUNSX1JFU0VUKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHQvKiB3YWl0IHVudGlsIHNvZnRyZXNldCBkb25lLiAqL1xuJiM0MztcdHJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLCAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4mIzQzO1x0XHRcdFx0ICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBub3JtYWwgdGVzdCBtb2RlLlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCAgICBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlXG4mIzQzOyAqIGFuZCBzZHMgc29mdHJlc2V0LlxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbiYjNDM7XHRpbnQgdmFsID0gMDtcbiYjNDM7XHRpbnQgcmV0ID0gLTE7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiBzZHMgc29mdHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGUgKi9cbiYjNDM7XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfSVNPTEFURSxcbiYjNDM7XHRcdFx0ICAgQk1DUl9SRVNFVCBcdTAwMjYgfkJNQ1JfSVNPTEFURSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovXG4mIzQzO1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLFxuJiM0MztcdFx0XHRcdCh2YWwgXHUwMDNjIDApIHx8ICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSwgNTAwMDAsIDYwMDAwMCxcbiYjNDM7XHRcdFx0XHR0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gdmFsO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMoKSAtIGNhbGxlZCB0byBkbyBzdG9yZSB3b3JraW5nIHN0YXR1c1xuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmV0OiBvcGVyYXRpb24mIzM5O3MgcmV0dXJuIGNvZGVcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZXQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0LyogY29uZmlndXJlIG5vcm1hbCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRyID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXQgPSByO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gZG8gUEhZIHNvZnR3YXJlIHJlc2V0XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0LyogdXRwIHNvZnQgcmVzZXQgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO3JldHJ5OlxuJiM0MztcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBwbGwgY2FsaWJyYXRpb24gKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBlMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6YXRpb24gdXRwICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0LyogZW5hYmxlIG5pYmJsZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIGlkbGUgZXJyIGRldGVjdCBlbmFibGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwM2QwLCAweDUyMTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiBvcHRpbWl6ZWQgMi41RyBsb25nIGNhYmxlIHBlcmZvcm1hbmNlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIDIuNUcgdGVtcGxhdGUgdG9uZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZmEsIDB4MDA4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZTIsIDB4MDE0OSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiAxMDBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmYsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzAsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzBiLCAweGFhMWQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNzFmLCAweDAwMzYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NiwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OCwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OSwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBFTUMgUkUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDAwNmUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuJiM0MztcdC8qIHJlc2V0ICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbiYjNDM7XHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuJiM0MztcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZTpcbiYjNDM7XHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX25vcm1hbDpcbiYjNDM7XHRyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHQgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXRcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xuJiM0MztcdGludCB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7XG4mIzQzO1x0aW50IHJldCA9IC0xO1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHQvKiByZWFkIGVmdXNlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHZhbF8xID0gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2YpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0dmFsXzIgPSByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTE0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR2YWxfMyA9IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogU2VyZGVzIG9wdGltaXphdGlvbiAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiZSwgMHgwMDBkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGE5LCAweDAwOWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIGFuYWxvZyBDRFIgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIFZDTyAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0Lyogb3B0aW1pemVkIFBMTCBsb2NrICovXG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MjkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuJiM0MztcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSkpIFx1MDAzZVx1MDAzZSA2O1xuJiM0MztcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDI5LCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDQxKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgXHUwMDI2PSB+KEJJVCgxKSB8IEJJVCgwKSk7XG4mIzQzO1x0dG1wID0gKHZhbF8xIFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSkgXHUwMDNlXHUwMDNlIDQ7XG4mIzQzO1x0cmV0IHw9IHRtcDtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuJiM0MztcdHRtcCA9ICh2YWxfMyBcdTAwMjYgKEJJVCgxKSB8IEJJVCgwKSkpO1xuJiM0MztcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJiLCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzYSwgMHgxMDA2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTcsIDB4MGE0NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0Y2QsIDB4MDAwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogU2VyZGVzIExETyAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgXHUwMDI2PSB+KEJJVCg2KSB8IEJJVCg1KSB8IEJJVCg0KSk7XG4mIzQzO1x0dG1wID0gKHZhbF8yIFx1MDAyNiAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSkgXHUwMDNlXHUwMDNlIDI7XG4mIzQzO1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDQpO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0IFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcbiYjNDM7XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpKSBcdTAwM2VcdTAwM2UgNTtcbiYjNDM7XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgOCk7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI0LCByZXQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBTZXJkZXMgUlggKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlMyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhhLCAweDBmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDYsIDB4MDA3Zik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDRmLCAweGZmMDgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmRlcyBtYW51YWwgY29uZmlnICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMSwgMHg3MDc0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgXHUwMDNlIDggKi9cbiYjNDM7XHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCBcdTAwMjY9IH5ZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0s7XG4mIzQzO1x0cmV0IHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7XG4mIzQzO1x0cmV0IHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfUkVTVjEsIHJldCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHQvKiByZXNldCBzZXJkZXMgKi9cbiYjNDM7XHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4mIzQzO1x0XHRcdCAgIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jazsgX19waHlfcmVhZCB0YWtlcyBubyBsb2NrICovXG4mIzQzO1x0cmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLFxuJiM0MztcdFx0XHRcdCh2YWwgXHUwMDNjIDApIHx8ICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSwgNTAwMDAsIDYwMDAwMCxcbiYjNDM7XHRcdFx0XHR0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gdmFsO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdC8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqL1xuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBpbnRlcm5hbCBwaHk4ODI0IGluaXRcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcdGludCB2YWwgPSAwO1xuJiM0MztcdGludCByID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDEsIDB4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0LyogcG93ZXIgZG93biAqL1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHg4Myk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogMi41RyB0ZW1wYXRlICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMzNiwgMHhhYjBhKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogMTAwMCBwZXJmb3JtYW5jZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhmOCwgMHhiM2ZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZSwgMHg1MzA4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMiwgMHg1MjIwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiAxMDAgdGVtcGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMwYiwgMHhhYTFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg3MWYsIDB4MzYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIDEwIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdC8qIDEwIHRlbXBhdGUgTUFVKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY3LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0LyogRU1DIENTLCBJbmNvbnNpc3RlbnQgd2l0aCBleHRlcm5hbCBwaHkgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGJlLCAweDY0MDYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHQvKiBFTUMgUkUqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4NmUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZTtcbiYjNDM7XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuJiM0MztcdC8qIHJlc2V0ICovXG4mIzQzO1x0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSxcbiYjNDM7XHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuJiM0MztcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1xuJiM0MztcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0ICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmU6XG4mIzQzO1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9ub3JtYWw6XG4mIzQzO1x0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXQgPSByO1xuJiM0MztcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2KTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRcdGdvdG8gZXJyO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnI7XG4gXHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4gXG4tZXJyX3Jlc3RvcmVfcGFnZTpcbi1cdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0OyVzIGRvbmUsIHBoeSBhZGRyOiAlZFxcblwmIzM0OywgX19mdW5jX18sXG4mIzQzO1x0XHQgICBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0MztlcnI6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4gfVxuIFxuIHN0YXRpYyBpbnQgeXQ4NTMxX3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbkBAIC0zMTA0LDYgJiM0Mzs0MjQyLDQxOCBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2dldF9mZWF0dXJlcyAtIHJlYWQgbW1kIHJlZ2lzdGVyIHRvIGdldCAyLjVHIGNhcGFiaWxpdHlcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XHRyZXQgPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzKHBoeWRldik7XG4mIzQzO1xuJiM0MztlcnI6XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IGxpbmsgPSAwO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdGxpbmsgPSAhIShyZXQgXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2X2RiZyhwaHlkZXYsIFwmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcblwmIzM0OywgX19mdW5jX18sXG4mIzQzO1x0XHQgICBwaHlkZXYtXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcbiYjNDM7XHRyZXR1cm4gbGluaztcbiYjNDM7ZXJyOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgbGluayA9IDA7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1x0aW50IHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VhdXRvbmVnX2NvbXBsZXRlKSB7XG4mIzQzO1x0XHRyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbHBhKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0dmFsID0gcmV0O1xuJiM0MztcbiYjNDM7XHRsaW5rID0gdmFsIFx1MDAyNiBZVFBIWV9TU1JfTElOSztcbiYjNDM7XHRpZiAobGluaylcbiYjNDM7XHRcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpbmspIHtcbiYjNDM7XHRcdGlmIChwaHlkZXYtXHUwMDNlbGluayA9PSAwKVxuJiM0MztcdFx0XHRwaHlkZXZfZGJnKHBoeWRldiwgXCYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGluayB1cFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDE7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGlmIChwaHlkZXYtXHUwMDNlbGluayA9PSAxKVxuJiM0MztcdFx0XHRwaHlkZXZfZGJnKHBoeWRldiwgXCYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGluayBkb3duXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbiYjNDM7XHR9XG4mIzQzO1x0cGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpOiB1dHAgcG93ZXIgb24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04gfCBCTUNSX0lTT0xBVEUsIDB4MCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9wb3dlcl9vbigpICAtIHNldCB1dHAgcG93ZXIgb24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO3JldHJ5OlxuJiM0MztcdC8qXG4mIzQzO1x0ICogSWYgdGhlIFBIWSB1cCBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuJiM0MztcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0ID0gcjtcbiYjNDM7XHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcdGludCByO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIHJldHJ5O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztyZXRyeTpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIElmIHRoZSBQSFkgZG93biBvcGVyYXRpb24gc3VjY2VlZHMgYnV0IHRoZSBzdWJzZXF1ZW50IG9wZXJhdGlvblxuJiM0MztcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0ciA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldCA9IHI7XG4mIzQzO1x0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfc3VzcGVuZCgpIC0gc3VzcGVuZCB0aGUgaGFyZHdhcmVcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4mIzQzO1x0aW50IHBoeV9jdHJsID0gMDtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuJiM0MztcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcbiYjNDM7XHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbiYjNDM7XHRcdHBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7XG4mIzQzO1xuJiM0MztcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMLFxuJiM0MztcdFx0XHRcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsIHBoeV9jdHJsKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldiwgcmV0KTtcbiYjNDM7XG4mIzQzO2VycjpcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2FnZSBmb3IgcGh5ODgyNC5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTtcbiYjNDM7XHRpbnQgcmVzO1xuJiM0MztcbiYjNDM7XHRpZiAoIXByaXYgfHwgIW5wKSB7XG4mIzQzO1x0XHRwaHlkZXZfZXJyKHBoeWRldiwgXCYjMzQ7JXM6IG1pc3Npbmcgc2hhcmVkIHByaXYgb3IgRFQgbm9kZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAgX19mdW5jX18pO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4mIzQzO1x0cmVzID0gb2ZfZ2V0X3BoeV9tb2RlKG5wLCBcdTAwMjZwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlKTtcbiYjNDM7XHRpZiAocmVzIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRwaHlkZXZfd2FybihwaHlkZXYsIFwmIzM0OyVzLCBwaHktbW9kZSBtaXNzaW5nIGluIERUUy5cXG5cJiMzNDssIF9fZnVuY19fKTtcbiYjNDM7XHRcdHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS5cbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuJiM0MztcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdHtcbiBcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLFxuQEAgLTMxOTAsMTMgJiM0Mzs0NzQwLDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbiBcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbiBcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxuJiM0MztcdFx0Lm5hbWUgPSBcJiMzNDtZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0XCYjMzQ7LFxuJiM0MztcdFx0LmdldF9mZWF0dXJlcyA9IHl0ODgyNF9nZXRfZmVhdHVyZXMsXG4mIzQzO1x0XHQucmVhZF9wYWdlID0geXQ4ODI0X3JlYWRfcGFnZSxcbiYjNDM7XHRcdC53cml0ZV9wYWdlID0geXQ4ODI0X3dyaXRlX3BhZ2UsXG4mIzQzO1x0XHQucHJvYmUgPSB5dDg4MjRfcHJvYmUsXG4mIzQzO1x0XHQuY29uZmlnX2FuZWcgPSB5dDg4MjRfY29uZmlnX2FuZWcsXG4mIzQzO1x0XHQuYW5lZ19kb25lID0geXQ4ODI0X2FuZWdfZG9uZSxcbiYjNDM7XHRcdC5jb25maWdfaW5pdCA9IHl0ODgyNF9jb25maWdfaW5pdCxcbiYjNDM7XHRcdC5yZWFkX3N0YXR1cyA9IHl0ODgyNF9yZWFkX3N0YXR1cyxcbiYjNDM7XHRcdC5zb2Z0X3Jlc2V0ID0geXQ4ODI0X3NvZnRfcmVzZXQsXG4mIzQzO1x0XHQuc3VzcGVuZCA9IHl0ODgyNF9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZSA9IHl0ODgyNF9yZXN1bWUsXG4mIzQzO1x0fSxcbiB9O1xuIFxuIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7XG4gXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXCYjMzQ7KTtcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O1BldGVyIEdlaXNcJiMzNDspO1xuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7RnJhbmtcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0t5bGVcJiMzNDspO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG5AQCAtMzIwNiw2ICYjNDM7NDc3Miw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LFxuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSkgfSxcbiYjNDM7XHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuaW5kZXggODcwOTIwMzExZjlhMC4uZjhlMDNkM2FmYTQ1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbkBAIC0xNDA4LDYgJiM0MzsxNDA4LDMwIEBAIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSlcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnNcbiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4mIzQzOyAqIEB0ZXN0X21vZGU6IHRlc3Rtb2RlIGluY2x1ZGVzIE5vcm1hbCB0byBUZXN0IG1vZGUgN1xuJiM0MzsgKlxuJiM0MzsgKiBEZXNjcmlwdGlvbjogU2V0IHRlbXBsYXRlIHRlc3Rtb2RlIGluY2x1ZGUgTm9ybWFsIHRvIFRlc3QgbW9kZSA3XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSAoZS5nLiByZWdpc3RlclxuJiM0MzsgKiByZWFkL3dyaXRlIGVycm9yKS5cbiYjNDM7ICovXG4mIzQzO2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgY3RybDtcbiYjNDM7XG4mIzQzO1x0aWYgKHRlc3RfbW9kZSBcdTAwM2MgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMIHx8XG4mIzQzO1x0ICAgIHRlc3RfbW9kZSBcdTAwM2UgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNylcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0Y3RybCA9IEZJRUxEX1BSRVAoTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSywgdGVzdF9tb2RlKTtcbiYjNDM7XHRyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFLFxuJiM0MztcdFx0XHQgICAgICBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9NQVNLLCBjdHJsKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcbiYjNDM7XG4gLyoqXG4gICogZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcgLSBnZXQgUExDQSBjb25maWd1cmF0aW9uIGZyb20gc3RhbmRhcmQgcmVnaXN0ZXJzXG4gICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcbmluZGV4IDNkOGFmZTZiN2YxYzUuLmZiODI3Y2MzYzk4ZjQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXG5AQCAtMjM1Nyw2ICYjNDM7MjM1Nyw3IEBAIGludCBnZW5waHlfYzQ1X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfcG1hX3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7XG4gaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTtcbiYjNDM7aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XG4gaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0ICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTtcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuaW5kZXggMDZmNGJjM2MyMGM3MS4uMzUzY2ExM2M2NGZjYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbkBAIC02Myw2ICYjNDM7NjMsNyBAQFxuIC8qIE1lZGlhLWRlcGVuZGVudCByZWdpc3RlcnMuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TV0FQUE9MXHQxMzBcdC8qIDEwR0JBU0UtVCBwYWlyIHN3YXAgXHUwMDI2IHBvbGFyaXR5ICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9UWFBXUlx0MTMxXHQvKiAxMEdCQVNFLVQgVFggcG93ZXIgY29udHJvbCAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFIDEzMiAvKiBUZXN0IG1vZGUgY29udHJvbCAqL1xuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU05SXHQxMzNcdC8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuXG4gXHRcdFx0XHRcdCAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfQ1NSXHQxNDdcdC8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovXG5AQCAtMzIwLDYgJiM0MzszMjEsMTcgQEBcbiAvKiBQTUEgMTBHQkFTRS1SIEZhc3QgUmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXIuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRVx0MHgwMDAxXHQvKiBGYXN0IHJldHJhaW4gZW5hYmxlICovXG4gXG4mIzQzOy8qIFBNQSAxMEdCQVNFLVQgVGVtcGxhdGUgVGVzdCBNb2RlIFJlZ2lzdGVyKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9NQVNLIEdFTk1BU0soMTUsIDEzKSAvKiBUZW1wbGF0ZSB0ZXN0IG1vZGUgKi9cbiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwgMHgwIC8qIFRlbXBsYXRlIE5vcm1hbCAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEgMHgxIC8qIFRlbXBsYXRlIFRlc3RNb2RlMSAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzIgMHgyIC8qIFRlbXBsYXRlIFRlc3RNb2RlMiAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzMgMHgzIC8qIFRlbXBsYXRlIFRlc3RNb2RlMyAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzQgMHg0IC8qIFRlbXBsYXRlIFRlc3RNb2RlNCAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzUgMHg1IC8qIFRlbXBsYXRlIFRlc3RNb2RlNSAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzYgMHg2IC8qIFRlbXBsYXRlIFRlc3RNb2RlNiAqL1xuJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzcgMHg3IC8qIFRlbXBsYXRlIFRlc3RNb2RlNyAqL1xuJiM0MztcbiAvKiBQQ1MgMTBHQkFTRS1SLy1UIHN0YXR1cyByZWdpc3RlciAxLiAqL1xuICNkZWZpbmUgTURJT19QQ1NfMTBHQlJUX1NUQVQxX0JMS0xLXHQweDAwMDFcdC8qIEJsb2NrIGxvY2sgYXR0YWluZWQgKi9cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMDo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41RyBFdGhlcm5ldCBQSFkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGFuZCBhZGRzIGFuIGFzc29jaWF0ZWQgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy4gVGhlIG1vZGlmaWVkIGNvZGUgdGFyZ2V0cyBhIHNwZWNpZmljIHBoeXNpY2FsIEV0aGVybmV0IFBIWSB0cmFuc2NlaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBzcGVjaWZpYyBEZXZpY2UgVHJlZSBkZXNjcmlwdGlvbiAoJiMzOTtldGhlcm5ldC1waHktcGFja2FnZSYjMzk7KSwgd2hpY2ggaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgeDg2XzY0L1FFTVUgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZSBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpcyBzb2xlbHkgY2FsbGVkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLCBhbmQgcHJvYmUgaW1tZWRpYXRlbHkgZmFpbHMgd2l0aG91dCB0aGUgT0Ygbm9kZS4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWUzMWVhMWE2YjUyYzg2OGI5YzdhNzQ5NjEyODYxZjBjMTcyYmU5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDE1IDEwOjU5OjQ4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwLi45M2U5Zjc2NTQwNGEzCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwKQEAgLTAsMCAmIzQzOzEsNTkgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwjCiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjCiYjNDM7CiYjNDM7dGl0bGU6IE1vdG9yQ29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIEt5bGUgU3dpdGNoICZsdDtreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbSZndDsKJiM0MzsKJiM0MztkZXNjcmlwdGlvbjoKJiM0MzsgIE1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIGlzIGEgUEhZIHBhY2thZ2Ugb2YgNCBQSFlzLgomIzQzOwomIzQzOyRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjCiYjNDM7CiYjNDM7cHJvcGVydGllczoKJiM0MzsgIGNvbXBhdGlibGU6CiYjNDM7ICAgIGVudW06CiYjNDM7ICAgICAgLSBtb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2UKJiM0MzsKJiM0MztyZXF1aXJlZDoKJiM0MzsgIC0gY29tcGF0aWJsZQomIzQzOyAgLSBwaHktbW9kZQomIzQzOyAgLSByZWcKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgbWRpbyB7CiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9ICZsdDsxJmd0OzsKJiM0MzsgICAgICAgICNzaXplLWNlbGxzID0gJmx0OzAmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7CiYjNDM7ICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAgICAgI3NpemUtY2VsbHMgPSAmbHQ7MCZndDs7CiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9ICYjMzQ7bW90b3Jjb21tLHl0ODgyNC1wYWNrYWdlJiMzNDs7CiYjNDM7ICAgICAgICAgICAgcmVnID0gJmx0OzkmZ3Q7OwomIzQzOwomIzQzOyAgICAgICAgICAgIHBoeS1tb2RlID0gJiMzNDtpbnRlcm5hbCYjMzQ7OwomIzQzOwomIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA0IHsKJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gJmx0OzQmZ3Q7OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7CiYjNDM7ICAgICAgICAgICAgZXRoZXJuZXQtcGh5QDUgewomIzQzOyAgICAgICAgICAgICAgICByZWcgPSAmbHQ7NSZndDs7CiYjNDM7ICAgICAgICAgICAgfTsKJiM0MzsKJiM0MzsgICAgICAgICAgICBldGhlcm5ldC1waHlANiB7CiYjNDM7ICAgICAgICAgICAgICAgIHJlZyA9ICZsdDs2Jmd0OzsKJiM0MzsgICAgICAgICAgICB9OwomIzQzOwomIzQzOyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA3IHsKJiM0MzsgICAgICAgICAgICAgICAgcmVnID0gJmx0OzcmZ3Q7OwomIzQzOyAgICAgICAgICAgIH07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwppbmRleCBkMzgzNTU5N2UzNzk1Li45OTZkNzVhZmVkNDQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZwpAQCAtMzYxLDkgJiM0MzszNjEsMTAgQEAgY29uZmlnIE1JQ1JPU0VNSV9QSFkKIAogY29uZmlnIE1PVE9SQ09NTV9QSFkKIAl0cmlzdGF0ZSAmIzM0O01vdG9yY29tbSBQSFlzJiMzNDsKJiM0MzsJc2VsZWN0IFBIWV9QQUNLQUdFCiAJaGVscAogCSAgRW5hYmxlcyBzdXBwb3J0IGZvciBNb3RvcmNvbW0gbmV0d29yayBQSFlzLgotCSAgQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMuCiYjNDM7CSAgQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMgYW5kIFlUODgyNCA0ICogMi41RyBQSFkuCiAKIGNvbmZpZyBOQVRJT05BTF9QSFkKIAl0cmlzdGF0ZSAmIzM0O05hdGlvbmFsIFNlbWljb25kdWN0b3IgUEhZcyYjMzQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKaW5kZXggOTBhNGY4NmYyNzU4Yi4uYjYwOTQ4YzljZTg4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYwpAQCAtMSwyNCAmIzQzOzEsMzEgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wJiM0MzsKIC8qCi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuCiYjNDM7ICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXIuCiAgKgogICogQXV0aG9yOiBQZXRlciBHZWlzICZsdDtwZ3dpcGVvdXRAZ21haWwuY29tJmd0OwogICogQXV0aG9yOiBGcmFuayAmbHQ7RnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tJmd0OwomIzQzOyAqIEF1dGhvcjogS3lsZSAmbHQ7a3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb20mZ3Q7CiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2V0aGVyZGV2aWNlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgva2VybmVsLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21kaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2YuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb2ZfbmV0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGh5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKIAomIzQzOyNpbmNsdWRlICYjMzQ7cGh5bGliLmgmIzM0OwomIzQzOwogI2RlZmluZSBQSFlfSURfWVQ4NTExCQkweDAwMDAwMTBhCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjEJCTB4MDAwMDAxMWEKICNkZWZpbmUgUEhZX0lEX1lUODUyMgkJMHg0ZjUxZTkyOAogI2RlZmluZSBQSFlfSURfWVQ4NTMxCQkweDRmNTFlOTFiCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFTCQkweDRmNTFlOTFhCiAjZGVmaW5lIFBIWV9JRF9ZVDg4MjEJCTB4NGY1MWVhMTkKJiM0MzsjZGVmaW5lIFBIWV9JRF9ZVDg4MjQJCTB4NGY1MWU4YjgKIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlldwogICoJVVRQIFJlZ2lzdGVyIHNwYWNlCXwJRklCRVIgUmVnaXN0ZXIgc3BhY2UKICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTMwLDYgJiM0MzszNywxOCBAQAogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKJiM0MzsvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXcKJiM0MzsgKiBVVFAgUmVnaXN0ZXIgc3BhY2UgfCBVU1hHTUlJIFJlZ2lzdGVyIHNwYWNlCiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqIHwgVVRQIE1JSQkJfCBVU1hHTUlJIE1JSQkJfAomIzQzOyAqIHwgVVRQIE1NRAkJfAkJCXwKJiM0MzsgKiB8IFVUUCBFeHRlbmRlZAl8IFVTWEdNSUkgRXh0ZW5kZWQJfAomIzQzOyAqIHwgVVRQIFRvcCBFeHRlbmRlZAl8IFVTWEdNSUkgVG9wIEV4dGVuZGVkCXwKJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7ICogfCAgIENvbW1vbiBUb3AgRXh0ZW5kZWQJCQl8CiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqLwomIzQzOwogLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi8KIAogLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqLwpAQCAtMzgxLDYgJiM0Mzs0MDAsMTMgQEAKICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSQkwCiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwCQkxCiAKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0sJCQlCSVQoMCkKJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UJCSgweDEpCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UJCQkoMHgwKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLCQlHRU5NQVNLKDMsIDApCiYjNDM7I2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFCQkJQklUKDEzKQomIzQzOyNkZWZpbmUgWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORwkJKDB4NykKJiM0MzsKIHN0cnVjdCB5dDg1MjFfcHJpdiB7CiAJLyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSwKIAkgKiB0aGlzIG1lYW5zIHRoYXQgeXQ4NTIxIG1heSB3b3JrIGluIHV0cCBvciBmaWJlciBtb2RlIHdoaWNoIGRlcGVuZHMKQEAgLTM5OSw2ICYjNDM7NDI1LDEyIEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7CiAJdTggcmVnX3BhZ2U7CiB9OwogCiYjNDM7c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiB7CiYjNDM7CXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2VfbW9kZTsKJiM0MzsJLyogc2hhcmVkX2xvY2sgdXNlZCB0byBVVFBzIG9wZXJhdGlvbiBpc29sYXRpb24gZHVyaW5nIHN3YXAgcmVnIHNwYWNlICovCiYjNDM7CXN0cnVjdCBtdXRleCBzaGFyZWRfbG9jazsKJiM0Mzt9OwomIzQzOwogLyoqCiAgKiB5dHBoeV9yZWFkX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlcgogICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQpAQCAtNDM3LDYgJiM0Mzs0NjksNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoqCiYjNDM7ICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtwaHlkZXYtJmd0O21kaW8uYnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHdyaXRlIGEgUEhZJiMzOTtzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byB3cml0ZQomIzQzOyAqIEB2YWw6IHJlZ2lzdGVyIHZhbCB0byB3cml0ZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sCiYjNDM7CQkJICAgICAgIHUxNiB2YWwpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7cGh5ZGV2LSZndDttZGlvLmJ1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0ID0gX19waHlfcGFja2FnZV93cml0ZShwaHlkZXYsIDAsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHBhZ2U6IHJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS4KJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7CiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CXJldCAmYW1wOz0gfllUODgyNF9SU1NSX1NQQUNFX01BU0s7CiYjNDM7CXJldCB8PSAocGFnZSAmYW1wOyBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0KTsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CXBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXIKICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKQEAgLTYyMiwxNSAmIzQzOzcxOCwxMDU3IEBAIHN0YXRpYyBpbnQgeXRwaHlfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiAJCW1hc2sgPSBZVFBIWV9XQ1JfRU5BQkxFIHwgWVRQSFlfV0NSX0lOVFJfU0VMOwogCQlyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVRQSFlfV09MX0NPTkZJR19SRUcsIG1hc2ssIDApOwogCi0JCS8qIERpc2FibGUgV09MIGludGVycnVwdCAqLwotCQlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRywKLQkJCQkgICBZVFBIWV9JRVJfV09MLCAwKTsKJiM0MzsJCS8qIERpc2FibGUgV09MIGludGVycnVwdCAqLwomIzQzOwkJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsCiYjNDM7CQkJCSAgIFlUUEhZX0lFUl9XT0wsIDApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3JlYWRfcGFnZSgpIC0gcmVhZCBQSFk4ODI0IHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFLwomIzQzOyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gb2xkX3BhZ2U7CiYjNDM7CiYjNDM7CXJldHVybiBvbGRfcGFnZSAmYW1wOyBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBwYWdlOiBSZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG8gd3JpdGUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwl1MTYgZGF0YTsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJcmV0dXJuIG9sZF9wYWdlOwomIzQzOwlkYXRhID0gb2xkX3BhZ2UgJmFtcDsgKH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTsKJiM0MzsJZGF0YSB8PSBwYWdlOwomIzQzOwomIzQzOwlyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIGludmFsaWQgdGVzdCBtb2RlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUKJiM0MzsJCShwaHlkZXYsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIGVuYWJsZSBzZHMgaXNvbGF0ZSAqLwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBCTUNSX0lTT0xBVEUpOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CS8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqLwomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCBVVFAgc29mdHJlc2V0LgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQsIEJNQ1JfUkVTRVQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CS8qIHdhaXQgdW50aWwgc29mdHJlc2V0IGRvbmUuICovCiYjNDM7CXJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLCAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwKJiM0MzsJCQkJICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKCkgLSBjb25maWcgWVQ4ODI0IHRvIG5vcm1hbCB0ZXN0IG1vZGUuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsCiYjNDM7CQkJCQkgICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlCiYjNDM7ICogYW5kIHNkcyBzb2Z0cmVzZXQuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFOwomIzQzOwlpbnQgdmFsID0gMDsKJiM0MzsJaW50IHJldCA9IC0xOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBzZHMgc29mdHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGUgKi8KJiM0MzsJcmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0lTT0xBVEUsCiYjNDM7CQkJICAgQk1DUl9SRVNFVCAmYW1wOyB+Qk1DUl9JU09MQVRFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jayAqLwomIzQzOwlyZXQgPSByZWFkX3BvbGxfdGltZW91dChfX3BoeV9yZWFkLCB2YWwsCiYjNDM7CQkJCSh2YWwgJmx0OyAwKSB8fCAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwgNTAwMDAsIDYwMDAwMCwKJiM0MzsJCQkJdHJ1ZSwgcGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CWlmICh2YWwgJmx0OyAwKQomIzQzOwkJcmV0ID0gdmFsOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CS8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqLwomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cygpIC0gY2FsbGVkIHRvIGRvIHN0b3JlIHdvcmtpbmcgc3RhdHVzCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEByZXQ6IG9wZXJhdGlvbiYjMzk7cyByZXR1cm4gY29kZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwkvKiBjb25maWd1cmUgbm9ybWFsIHRlc3QgbW9kZSAqLwomIzQzOwlyID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZV9tb2RlICE9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJCXJldCA9IHI7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJaWYgKHByaXYtJmd0O2ludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHNkcyBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHV0cCBzb2Z0IHJlc2V0ICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0MztyZXRyeToKJiM0MzsJcmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCB1dHAgaW5pdAomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwlpbnQgcjsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJLyogcG93ZXIgZG93biAqLwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIHBsbCBjYWxpYnJhdGlvbiAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4MGNiYSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGEwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6YXRpb24gdXRwICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogZW5hYmxlIG5pYmJsZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDAwMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIGlkbGUgZXJyIGRldGVjdCBlbmFibGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgMi41RyBsb25nIGNhYmxlIHBlcmZvcm1hbmNlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNzIsIDB4NTAzOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzg4LCAweDAwYTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBmYXN0IHJldHJhaW4gKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM1OSwgMHgyMTQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDBjLCAweGMxYTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CS8qIDIuNUcgdGVtcGxhdGUgdG9uZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDAwODMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZTIsIDB4MDE0OSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdmLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODAsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgMTAwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzM2LCAweGFiMGEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNDAsIDB4MzAxZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZSwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzAsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MSwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgMTAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDcxZiwgMHgwMDM2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmIsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgMTBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NiwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY3LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OSwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGY4LCAweGIzZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwNTksIDB4NDA0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJkLCAweGQwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmUsIDB4NTMwOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQzLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDIsIDB4NTIyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIEVNQyBDUyAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGM4LCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YSwgMHg0MGZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwkvKiBvcHRpbWl6ZWQgRU1DIFJFICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODIsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDAwNmUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwkvKiByZXNldCAqLwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLAomIzQzOwkJCSBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CXJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CiYjNDM7CXJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LAomIzQzOwkJCQkJICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX25vcm1hbDsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmU6CiYjNDM7CXIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfbm9ybWFsOgomIzQzOwlyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsCiYjNDM7CQkJCQkgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXQKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKgomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFOwomIzQzOwlpbnQgdmFsXzEsIHZhbF8yLCB2YWxfMywgdG1wOwomIzQzOwlpbnQgcmV0ID0gLTE7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIHJlYWQgZWZ1c2UgKi8KJiM0MzsJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNlKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWVsc2UKJiM0MzsJCXZhbF8xID0gcmV0OwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJZWxzZQomIzQzOwkJdmFsXzIgPSByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTE0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwllbHNlCiYjNDM7CQl2YWxfMyA9IHJldDsKJiM0MzsKJiM0MzsJLyogU2VyZGVzIG9wdGltaXphdGlvbiAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBhbmFsb2cgQ0RSICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBWQ08gKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM4LCAweDkwMjQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDM5LCAweDAwYzApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIFBMTCBsb2NrICovCiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCAmYW1wOz0gfihCSVQoMTMpIHwgQklUKDEyKSk7CiYjNDM7CXRtcCA9ICh2YWxfMSAmYW1wOyAoQklUKDcpIHwgQklUKDYpKSkgJmd0OyZndDsgNjsKJiM0MzsJcmV0IHw9ICh0bXAgJmx0OyZsdDsgMTIpOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDEpIHwgQklUKDApKTsKJiM0MzsJdG1wID0gKHZhbF8xICZhbXA7IChCSVQoNSkgfCBCSVQoNCkpKSAmZ3Q7Jmd0OyA0OwomIzQzOwlyZXQgfD0gdG1wOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDEzKSB8IEJJVCgxMikpOwomIzQzOwl0bXAgPSAodmFsXzMgJmFtcDsgKEJJVCgxKSB8IEJJVCgwKSkpOwomIzQzOwlyZXQgfD0gKHRtcCAmbHQ7Jmx0OyAxMik7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYiwgcmV0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzYSwgMHgxMDA2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NTQsIDB4MGYxNCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTcsIDB4MGE0NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBkaWdpdGFsIGV5ZSBkaWFncmFtIG9mIFNlckRlcyAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0Y2QsIDB4MDAwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBTZXJkZXMgTERPICovCiYjNDM7CXJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCAmYW1wOz0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpOwomIzQzOwl0bXAgPSAodmFsXzIgJmFtcDsgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkpICZndDsmZ3Q7IDI7CiYjNDM7CXJldCB8PSAodG1wICZsdDsmbHQ7IDQpOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgJmFtcDs9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7CiYjNDM7CXRtcCA9ICh2YWxfMiAmYW1wOyAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSkgJmd0OyZndDsgNTsKJiM0MzsJcmV0IHw9ICh0bXAgJmx0OyZsdDsgOCk7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIG9wdGltaXplZCBTZXJkZXMgUlggKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhhLCAweDBmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA4LCAweDdjMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDRmLCAweGZmMDgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJLyogb3B0aW1pemVkIFNlcmRlcyBUWCAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDAwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzICZndDsgOCAqLwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX1JFU1YxKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCAmYW1wOz0gfllUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTSzsKJiM0MzsJcmV0IHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7CiYjNDM7CXJldCB8PSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9SRVNWMSwgcmV0KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIHJlc2V0IHNlcmRlcyAqLwomIzQzOwlyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsCiYjNDM7CQkJICAgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrOyBfX3BoeV9yZWFkIHRha2VzIG5vIGxvY2sgKi8KJiM0MzsJcmV0ID0gcmVhZF9wb2xsX3RpbWVvdXQoX19waHlfcmVhZCwgdmFsLAomIzQzOwkJCQkodmFsICZsdDsgMCkgfHwgISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksIDUwMDAwLCA2MDAwMDAsCiYjNDM7CQkJCXRydWUsIHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldCA9IHZhbDsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwkvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi8KJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKCkgLSBjb25maWcgaW50ZXJuYWwgcGh5ODgyNCBpbml0CiYjNDM7ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiYjNDM7ICoKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsJaW50IHZhbCA9IDA7CiYjNDM7CWludCByID0gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MSwgMHgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwkvKiBwb3dlciBkb3duICovCiYjNDM7CXJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHg4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMi41RyB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDgwLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiAxMDAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzM2LCAweGFiMGEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0MCwgMHgzMDFkKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiAxMDAwIHBlcmZvcm1hbmNlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhmOCwgMHhiM2ZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZSwgMHg1MzA4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMiwgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwkvKiAxMDAgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZmLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDcxZiwgMHgzNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJLyogMTAgdGVtcGF0ZSAqLwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIDEwIHRlbXBhdGUgTUFVKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY2LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NywgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY5LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIEVNQyBDUywgSW5jb25zaXN0ZW50IHdpdGggZXh0ZXJuYWwgcGh5ICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGM4LCAweGZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzdhLCAweDQwZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CS8qIEVNQyBSRSovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4NmUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmU7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX25vcm1hbDsKJiM0MzsJLyogcmVzZXQgKi8KJiM0MzsJcmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSwKJiM0MzsJCQkgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwlyZXQgPSBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLCAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwKJiM0MzsJCQkJICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsOwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwKJiM0MzsJCQkJCSAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9ub3JtYWw7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlOgomIzQzOwlyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX25vcm1hbDoKJiM0MzsJciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LAomIzQzOwkJCQkJIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCAmYW1wOyZhbXA7IHIgJmx0OyAwKQomIzQzOwkJcmV0ID0gcjsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlpZiAocHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2KTsKIAkJaWYgKHJldCAmbHQ7IDApCi0JCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnI7CiYjNDM7CQlyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnI7CiAJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7CiAKLWVycl9yZXN0b3JlX3BhZ2U6Ci0JcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0MzsJcGh5ZGV2X2RiZyhwaHlkZXYsICYjMzQ7JXMgZG9uZSwgcGh5IGFkZHI6ICVkXG4mIzM0OywgX19mdW5jX18sCiYjNDM7CQkgICBwaHlkZXYtJmd0O21kaW8uYWRkcik7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7ZXJyOgomIzQzOwltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgeXQ4NTMxX3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKQEAgLTMxMDQsNiAmIzQzOzQyNDIsNDE4IEBAIHN0YXRpYyBpbnQgeXQ4ODIxX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCXJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfZ2V0X2ZlYXR1cmVzIC0gcmVhZCBtbWQgcmVnaXN0ZXIgdG8gZ2V0IDIuNUcgY2FwYWJpbGl0eQomIzQzOyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdAomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnI7CiYjNDM7CXJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTsKJiM0MzsKJiM0MztlcnI6CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2FuZWdfZG9uZSgpICAtIGNoZWNrIG5lZ290aWF0aW9uIHN0YXRlLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgbGluayA9IDA7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlsaW5rID0gISEocmV0ICZhbXA7IFlUUEhZX1NTUl9MSU5LKTsKJiM0MzsKJiM0MzsJcGh5ZGV2X2RiZyhwaHlkZXYsICYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXG4mIzM0OywgX19mdW5jX18sCiYjNDM7CQkgICBwaHlkZXYtJmd0O21kaW8uYWRkciwgbGluayk7CiYjNDM7CXJldHVybiBsaW5rOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBsaW5rID0gMDsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CWludCB2YWwgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBnZW5waHlfcmVhZF9zdGF0dXMocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDthdXRvbmVnX2NvbXBsZXRlKSB7CiYjNDM7CQlyZXQgPSBnZW5waHlfYzQ1X3JlYWRfbHBhKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IHBoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJdmFsID0gcmV0OwomIzQzOwomIzQzOwlsaW5rID0gdmFsICZhbXA7IFlUUEhZX1NTUl9MSU5LOwomIzQzOwlpZiAobGluaykKJiM0MzsJCXl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTsKJiM0MzsKJiM0MzsJaWYgKGxpbmspIHsKJiM0MzsJCWlmIChwaHlkZXYtJmd0O2xpbmsgPT0gMCkKJiM0MzsJCQlwaHlkZXZfZGJnKHBoeWRldiwgJiMzNDslcywgcGh5IGFkZHI6ICVkLCBsaW5rIHVwXG4mIzM0OywKJiM0MzsJCQkJICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsJCXBoeWRldi0mZ3Q7bGluayA9IDE7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpZiAocGh5ZGV2LSZndDtsaW5rID09IDEpCiYjNDM7CQkJcGh5ZGV2X2RiZyhwaHlkZXYsICYjMzQ7JXMsIHBoeSBhZGRyOiAlZCwgbGluayBkb3duXG4mIzM0OywKJiM0MzsJCQkJICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyKTsKJiM0MzsJCXBoeWRldi0mZ3Q7bGluayA9IDA7CiYjNDM7CX0KJiM0MzsJcGh5X3Jlc29sdmVfYW5lZ19wYXVzZShwaHlkZXYpOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4CiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQocGh5ZGV2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKCk6IHV0cCBwb3dlciBvbi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOIHwgQk1DUl9JU09MQVRFLCAweDApOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcG93ZXJfb24oKSAgLSBzZXQgdXRwIHBvd2VyIG9uLgomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXQKJiM0MzsgKgomIzQzOyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwkJLyogdXRwIHBvd2VyIG9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogc2RzIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogdXRwIHBvd2VyIG9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7cmV0cnk6CiYjNDM7CS8qCiYjNDM7CSAqIElmIHRoZSBQSFkgdXAgb3BlcmF0aW9uIHN1Y2NlZWRzIGJ1dCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb24KJiM0MzsJICogZmFpbHMsIHJldmVydCB0byB0aGUgZGVmYXVsdCBzdGF0ZS4KJiM0MzsJICovCiYjNDM7CXIgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwICZhbXA7JmFtcDsgciAmbHQ7IDApCiYjNDM7CQlyZXQgPSByOwomIzQzOwlyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmUKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXQgPSB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcG93ZXJfZG93bigpICAtIHNldCB1dHAgcG93ZXIgZG93bi4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0CiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTsKJiM0MzsJaW50IHJldDsKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwkJLyogdXRwIHBvd2VyIGRvd24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHNkcyBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsKJiM0MzsJCS8qIHV0cCBwb3dlciBkb3duICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gcmV0cnk7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwomIzQzOwkJLyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byByZXRyeTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0MzsKJiM0MztyZXRyeToKJiM0MzsJLyoKJiM0MzsJICogSWYgdGhlIFBIWSBkb3duIG9wZXJhdGlvbiBzdWNjZWVkcyBidXQgdGhlIHN1YnNlcXVlbnQgb3BlcmF0aW9uCiYjNDM7CSAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuCiYjNDM7CSAqLwomIzQzOwlyID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpOwomIzQzOwlpZiAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByICZsdDsgMCkKJiM0MzsJCXJldCA9IHI7CiYjNDM7CXJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb24KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CWludCBwaHlfY3RybCA9IDA7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwcml2LSZndDtzaGFyZWRfbG9jayk7CiYjNDM7CXJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwomIzQzOwlpZiAobGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklULAomIzQzOwkJCSAgICAgIHBoeWRldi0mZ3Q7YWR2ZXJ0aXNpbmcpKQomIzQzOwkJcGh5X2N0cmwgPSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RzsKJiM0MzsKJiM0MzsJcmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsCiYjNDM7CQkJCSAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsIHBoeV9jdHJsKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycjsKJiM0MzsKJiM0MzsJcmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpOwomIzQzOwomIzQzO2VycjoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7c2hhcmVkX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZSgpICAtIGluaXQgcGh5IHBhY2thZ2UgZm9yIHBoeTg4MjQuCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7CiYjNDM7CXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBwaHlfcGFja2FnZV9nZXRfbm9kZShwaHlkZXYpOwomIzQzOwlpbnQgcmVzOwomIzQzOwomIzQzOwlpZiAoIXByaXYgfHwgIW5wKSB7CiYjNDM7CQlwaHlkZXZfZXJyKHBoeWRldiwgJiMzNDslczogbWlzc2luZyBzaGFyZWQgcHJpdiBvciBEVCBub2RlXG4mIzM0OywKJiM0MzsJCQkgICBfX2Z1bmNfXyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwkvKiBJbml0aWFsaXNlIHNoYXJlZCBsb2NrIGZvciBZVDg4MjQgKi8KJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3ByaXYtJmd0O3NoYXJlZF9sb2NrKTsKJiM0MzsJcmVzID0gb2ZfZ2V0X3BoeV9tb2RlKG5wLCAmYW1wO3ByaXYtJmd0O2ludGVyZmFjZV9tb2RlKTsKJiM0MzsJaWYgKHJlcyAmbHQ7IDApIHsKJiM0MzsJCXBoeWRldl93YXJuKHBoeWRldiwgJiMzNDslcywgcGh5LW1vZGUgbWlzc2luZyBpbiBEVFMuXG4mIzM0OywgX19mdW5jX18pOwomIzQzOwkJcHJpdi0mZ3Q7aW50ZXJmYWNlX21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGRldmljZSAqZGV2ID0gJmFtcDtwaHlkZXYtJmd0O21kaW8uZGV2OwomIzQzOwlzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7CiYjNDM7CQlyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAl7CiAJCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSwKQEAgLTMxOTAsMTMgJiM0Mzs0NzQwLDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKIAkJLnN1c3BlbmQJCT0geXQ4ODIxX3N1c3BlbmQsCiAJCS5yZXN1bWUJCQk9IHl0ODgyMV9yZXN1bWUsCiAJfSwKJiM0MzsJewomIzQzOwkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLAomIzQzOwkJLm5hbWUgPSAmIzM0O1lUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXQmIzM0OywKJiM0MzsJCS5nZXRfZmVhdHVyZXMgPSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLAomIzQzOwkJLnJlYWRfcGFnZSA9IHl0ODgyNF9yZWFkX3BhZ2UsCiYjNDM7CQkud3JpdGVfcGFnZSA9IHl0ODgyNF93cml0ZV9wYWdlLAomIzQzOwkJLnByb2JlID0geXQ4ODI0X3Byb2JlLAomIzQzOwkJLmNvbmZpZ19hbmVnID0geXQ4ODI0X2NvbmZpZ19hbmVnLAomIzQzOwkJLmFuZWdfZG9uZSA9IHl0ODgyNF9hbmVnX2RvbmUsCiYjNDM7CQkuY29uZmlnX2luaXQgPSB5dDg4MjRfY29uZmlnX2luaXQsCiYjNDM7CQkucmVhZF9zdGF0dXMgPSB5dDg4MjRfcmVhZF9zdGF0dXMsCiYjNDM7CQkuc29mdF9yZXNldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0LAomIzQzOwkJLnN1c3BlbmQgPSB5dDg4MjRfc3VzcGVuZCwKJiM0MzsJCS5yZXN1bWUgPSB5dDg4MjRfcmVzdW1lLAomIzQzOwl9LAogfTsKIAogbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlciYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXImIzM0Oyk7CiBNT0RVTEVfQVVUSE9SKCYjMzQ7UGV0ZXIgR2VpcyYjMzQ7KTsKIE1PRFVMRV9BVVRIT1IoJiMzNDtGcmFuayYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7S3lsZSYjMzQ7KTsKIE1PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHsKQEAgLTMyMDYsNiAmIzQzOzQ3NzIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHsKIAl7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LAogCXsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LAogCXsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sCiYjNDM7CXsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpIH0sCiAJeyAvKiBzZW50aW5lbCAqLyB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYwppbmRleCA4NzA5MjAzMTFmOWEwLi5mOGUwM2QzYWZhNDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMKQEAgLTE0MDgsNiAmIzQzOzE0MDgsMzAgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKQogfQogRVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pOwogCiYjNDM7LyoqCiYjNDM7ICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnMKJiM0MzsgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3QKJiM0MzsgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBOb3JtYWwgdG8gVGVzdCBtb2RlIDcKJiM0MzsgKgomIzQzOyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBOb3JtYWwgdG8gVGVzdCBtb2RlIDcKJiM0MzsgKgomIzQzOyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSAoZS5nLiByZWdpc3RlcgomIzQzOyAqIHJlYWQvd3JpdGUgZXJyb3IpLgomIzQzOyAqLwomIzQzO2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpCiYjNDM7ewomIzQzOwlpbnQgY3RybDsKJiM0MzsKJiM0MzsJaWYgKHRlc3RfbW9kZSAmbHQ7IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCB8fAomIzQzOwkgICAgdGVzdF9tb2RlICZndDsgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNykKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsKJiM0MzsJY3RybCA9IEZJRUxEX1BSRVAoTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSywgdGVzdF9tb2RlKTsKJiM0MzsJcmV0dXJuIHBoeV9tb2RpZnlfbW1kKHBoeWRldiwgTURJT19NTURfUE1BUE1ELCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSwKJiM0MzsJCQkgICAgICBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9NQVNLLCBjdHJsKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7CiYjNDM7CiAvKioKICAqIGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnIC0gZ2V0IFBMQ0EgY29uZmlndXJhdGlvbiBmcm9tIHN0YW5kYXJkIHJlZ2lzdGVycwogICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCAzZDhhZmU2YjdmMWM1Li5mYjgyN2NjM2M5OGY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5LmgKQEAgLTIzNTcsNiAmIzQzOzIzNTcsNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTsKIGludCBnZW5waHlfYzQ1X3BtYV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiBpbnQgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTsKIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7CiYjNDM7aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7CiBpbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAkJCSAgICBzdHJ1Y3QgcGh5X3BsY2FfY2ZnICpwbGNhX2NmZyk7CiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmggYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oCmluZGV4IDA2ZjRiYzNjMjBjNzEuLjM1M2NhMTNjNjRmY2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaApAQCAtNjMsNiAmIzQzOzYzLDcgQEAKIC8qIE1lZGlhLWRlcGVuZGVudCByZWdpc3RlcnMuICovCiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0wJMTMwCS8qIDEwR0JBU0UtVCBwYWlyIHN3YXAgJmFtcDsgcG9sYXJpdHkgKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlRfVFhQV1IJMTMxCS8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzIgLyogVGVzdCBtb2RlIGNvbnRyb2wgKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlRfU05SCTEzMwkvKiAxMEdCQVNFLVQgU05SIG1hcmdpbiwgbGFuZSBBLgogCQkJCQkgKiBMYW5lcyBCLUQgYXJlIG51bWJlcmVkIDEzNC0xMzYuICovCiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfQ1NSCTE0NwkvKiAxMEdCQVNFLVIgZmFzdCByZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCAqLwpAQCAtMzIwLDYgJiM0MzszMjEsMTcgQEAKIC8qIFBNQSAxMEdCQVNFLVIgRmFzdCBSZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCByZWdpc3Rlci4gKi8KICNkZWZpbmUgTURJT19QTUFfMTBHQlJfRlNSVF9FTkFCTEUJMHgwMDAxCS8qIEZhc3QgcmV0cmFpbiBlbmFibGUgKi8KIAomIzQzOy8qIFBNQSAxMEdCQVNFLVQgVGVtcGxhdGUgVGVzdCBNb2RlIFJlZ2lzdGVyKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0sgR0VOTUFTSygxNSwgMTMpIC8qIFRlbXBsYXRlIHRlc3QgbW9kZSAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMIDB4MCAvKiBUZW1wbGF0ZSBOb3JtYWwgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEgMHgxIC8qIFRlbXBsYXRlIFRlc3RNb2RlMSAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMiAweDIgLyogVGVtcGxhdGUgVGVzdE1vZGUyICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8zIDB4MyAvKiBUZW1wbGF0ZSBUZXN0TW9kZTMgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzQgMHg0IC8qIFRlbXBsYXRlIFRlc3RNb2RlNCAqLwomIzQzOyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNSAweDUgLyogVGVtcGxhdGUgVGVzdE1vZGU1ICovCiYjNDM7I2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV82IDB4NiAvKiBUZW1wbGF0ZSBUZXN0TW9kZTYgKi8KJiM0MzsjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzcgMHg3IC8qIFRlbXBsYXRlIFRlc3RNb2RlNyAqLwomIzQzOwogLyogUENTIDEwR0JBU0UtUi8tVCBzdGF0dXMgcmVnaXN0ZXIgMS4gKi8KICNkZWZpbmUgTURJT19QQ1NfMTBHQlJUX1NUQVQxX0JMS0xLCTB4MDAwMQkvKiBCbG9jayBsb2NrIGF0dGFpbmVkICovCiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTA6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MjcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA5NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpczogTW90b3Jjb21tIFlUODgyNCBQSFkgRHJpdmVyKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCYjMzk7cyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBpdCAqZG9lcyouIEl0IGxvb2tzIGxpa2Ugd2UgaGF2ZToKCjEuICAqKkRldmljZXRyZWUgYmluZGluZ3M6KiogQSBuZXcgYmluZGluZyBkZWZpbml0aW9uIGZvciB0aGUgYG1vdG9yY29tbSx5dDg4MjRgIGRldmljZS4gT2theSwgc3RhbmRhcmQgc3R1ZmYgZm9yIGRldmljZSBkaXNjb3ZlcnkuCjIuICAqKktjb25maWcgdXBkYXRlOioqICBFbmFibGluZyBzdXBwb3J0IGZvciB0aGUgWVQ4ODI0IFBIWSB3aXRoaW4gdGhlIGBQSFlfUEFDS0FHRWAgZnJhbWV3b3JrLiBUaGlzIHN1Z2dlc3RzIGEgbW9kdWxhciBkZXNpZ24sIHdoaWNoIGlzIGdvb2QuCjMuICAqKkNvcmUgZHJpdmVyIGltcGxlbWVudGF0aW9uOioqIFRoZSBtZWF0IG9mIHRoZSBwYXRjaDogYSBuZXcgYG1vdG9yY29tbS5jYCBkcml2ZXIgd2l0aCBhIHRvbiBvZiBuZXcgZnVuY3Rpb25zLCBpbmNsdWRpbmcgc3BlY2lmaWMgcmVhZC93cml0ZSBvcGVyYXRpb25zIChwYWdlZCBhbmQgdW5wYWdlZCksIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uLCBwb3dlciBtYW5hZ2VtZW50LCBhdXRvLW5lZ290aWF0aW9uLCBhbmQgc3RhdHVzIHJlYWQgZnVuY3Rpb25zLiAgVGhleSBzZWVtIHF1aXRlIGxvdyBsZXZlbC4gVGhlcmUmIzM5O3MgYWxzbyBhIG1vZGlmaWNhdGlvbiB0byBgeXRwaHlfc2V0X3dvbGAgd2l0aCBhIGNyaXRpY2FsIGNoZWNrIGFkZGVkLCB3aGljaCBpcyBnb29kOiBlbnN1cmVzIHRoYXQgYSBmYWlsdXJlIGluIHRoZSBtb2RpZmljYXRpb24gZnVuY3Rpb24gY29ycmVjdGx5IHJldHVybnMgdGhlIGVycm9yLgo0LiAgKipwaHktYzQ1LmMgdXBkYXRlOioqIEFkZGl0aW9uIG9mIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCwgd2hpY2ggc3VnZ2VzdHMgc29tZSBnZW5lcmljIHRlc3QgbW9kZSBmdW5jdGlvbmFsaXR5LCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmb3IgZmF1bHQgaW5qZWN0aW9uLgo1LiAgKipIZWFkZXIgdXBkYXRlczoqKiBGdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBtYWNyb3MgYWRkZWQgaW4gYHBoeS5oYCBhbmQgYG1kaW8uaGAuIFN0YW5kYXJkIHN0dWZmLCBuZWNlc3NhcnkgZm9yIHRoZSBuZXcgZHJpdmVyLgoKTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogKnJlYWNoYWJpbGl0eSouIENhbiB3ZSBhY3R1YWxseSAqaGl0KiB0aGlzIGNvZGUgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50PyAgU3BlY2lmaWNhbGx5LCB0aGUgTW90b3Jjb21tIFlUODgyNCBpcyBhIFBIWSwgYSBwaHlzaWNhbCBsYXllciBkZXZpY2UuIFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyB0aGUgODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci4gVGhpcyBtZWFucyBpdCBpbnRlcmFjdHMgd2l0aCBhbiBFdGhlcm5ldCBQSFkgb24gYSBNRElPIGJ1cyBvciBkZXZpY2UgdHJlZS4gIFRoZSBxdWVzdGlvbiBpcyBjYW4gd2UgaW5zdGFudGlhdGUgdGhlc2U/IENhbiB3ZSBlbXVsYXRlIHRoaXMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IGxpa2UgU3l6a2FsbGVyIG9yIFFFTVUgd2l0aG91dCBuZWVkaW5nIGFjdHVhbCBoYXJkd2FyZT8KCkkgbmVlZCB0byBkaWcgZGVlcGVyLiBIb3cgZG9lcyB0aGUga2VybmVsIHByb2JlIGZvciB0aGVzZSBQSFkgZGV2aWNlcz8gIEFyZSB0aGVyZSB2aXJ0dWFsIG9yIG1vY2sgTURJTyBidXMgaW1wbGVtZW50YXRpb25zIHdlIGNvdWxkIGxldmVyYWdlPyBDYW4gd2UgY3JlYXRlIGFuIE1ESU8gYnVzIG9yIFBIWSBkZXZpY2UgdmlhIG5ldGxpbmssIGEgdmlydHVhbCBidXMsIG9yIGV2ZW4gVVNCPyAgVGhlIGtleSBpcyB0byBmaWd1cmUgb3V0IGlmIHdlIGNhbiAqbW9jayogdGhlIGV4aXN0ZW5jZSBvZiB0aGlzIGhhcmR3YXJlIG9yLCBmYWlsaW5nIHRoYXQsIGlmIFN5emthbGxlciBvZmZlcnMgYW55IHN1cHBvcnQgZm9yIGludGVyYWN0aW5nIHdpdGggUEhZIG9yIE1ESU8gZGV2aWNlcy4gSSBuZWVkIHRvIHNlYXJjaCB0aGUga2VybmVsIHNvdXJjZSBhbmQgU3l6a2FsbGVyIGRvY3VtZW50YXRpb24gdG8gZGV0ZXJtaW5lIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X2RldmljZV9yZWdpc3RlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jPTkzMT1zdGF0aWMgaW50IHhnYmVfcGh5X2ZpbmRfcGh5X2RldmljZShzdHJ1Y3QgeGdiZV9wcnZfZGF0YSAqcGRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYy05NzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jOjk3NjpcdHJldCA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTc3LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzo5Nzg6XHRcdG5ldGRldl9lcnIocGRhdGEtXHUwMDNlbmV0ZGV2LCBcJiMzNDtwaHlfZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxcblwmIzM0Oyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTk3OS1cdFx0cGh5X2RldmljZV9mcmVlKHBoeWRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYz03MTY9aG5zX21hY19yZWdpc3Rlcl9waHlkZXYoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBobnNfbWFjX2NiICptYWNfY2IsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYy03NDQtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9obnMvaG5zX2RzYWZfbWFjLmM6NzQ1Olx0cmMgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jLTc0Ni1cdGlmIChyYykge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYz0xOTI5PXN0YXRpYyBpbnQgbmV0c2VjX3JlZ2lzdGVyX21kaW8oc3RydWN0IG5ldHNlY19wcml2ICpwcml2LCB1MzIgcGh5X2FkZHIpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jLTE5ODMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6MTk4NDpcdFx0cmV0ID0gcGh5X2RldmljZV9yZWdpc3Rlcihwcml2LVx1MDAzZXBoeWRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmMtMTk4NS1cdFx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYy0xOTg4LVx0XHRcdGRldl9lcnIocHJpdi1cdTAwM2VkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6MTk4OTpcdFx0XHRcdFwmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXIgZXJyKCVkKVxcblwmIzM0OywgcmV0KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYy0xOTkwLVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTQyPWZ3bm9kZV9maW5kX21paV90aW1lc3RhbXBlcihzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy02OS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzo3MDppbnQgZndub2RlX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy03MS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMDMtXHQgKi9cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMDQ6XHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMDUtXHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTE0LX1cbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYzoxMTU6RVhQT1JUX1NZTUJPTChmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTYtXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM9MTE3PWludCBmd25vZGVfbWRpb2J1c19yZWdpc3Rlcl9waHkoc3RydWN0IG1paV9idXMgKmJ1cyxcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTQ5LVx0XHQvKiBBbGwgZGF0YSBpcyBub3cgc3RvcmVkIGluIHRoZSBwaHkgc3RydWN0LCBzbyByZWdpc3RlciBpdCAqL1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1MDpcdFx0cmMgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTUxLVx0XHRpZiAocmMpIHtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTU2LVx0fSBlbHNlIGlmIChpc19vZl9ub2RlKGNoaWxkKSkge1xuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1NzpcdFx0cmMgPSBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKGJ1cywgcGh5LCBjaGlsZCwgYWRkcik7XG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTU4LVx0XHRpZiAocmMpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmM9MjYzPXN0cnVjdCBwaHlfZGV2aWNlICp4Z2VuZV9lbmV0X3BoeV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIpXG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmMtMjcwLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmM6MjcxOlx0aWYgKHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5X2RldikpXG5kcml2ZXJzL25ldC9tZGlvL21kaW8teGdlbmUuYy0yNzItXHRcdHBoeV9kZXZpY2VfZnJlZShwaHlfZGV2KTtcbi0tXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYz0zMj1zdGF0aWMgaW50IG9mX2dldF9waHlfaWQoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIHUzMiAqcGh5X2lkKVxuLS1cbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTM2LVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6Mzc6aW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTM4LVx0XHRcdFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwgdTMyIGFkZHIpXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy0zOS17XG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYzo0MDpcdHJldHVybiBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKG1kaW8sIHBoeSxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTQxLVx0XHRcdFx0XHRcdCAgb2ZfZndub2RlX2hhbmRsZShjaGlsZCksXG4tLVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDMtfVxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM6NDQ6RVhQT1JUX1NZTUJPTChvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDUtXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTEzMT1zdHJ1Y3QgcGh5X2RldmljZSAqZml4ZWRfcGh5X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzICpzdGF0dXMsXG4tLVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE2Mi1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzoxNjM6XHRyZXQgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTY0LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTQwOD1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDM3LVxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDM4Olx0ZXJyID0gcGh5X2RldmljZV9yZWdpc3RlcihwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmMtNDM5LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jPTU1MT1zdGF0aWMgdm9pZCB0amExMTAyX3AxX3JlZ2lzdGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTctXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYzo1OTg6XHRcdHJldCA9IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihidXMsIHBoeSwgY2hpbGQsIGFkZHIpO1xuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTk5LVx0XHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTAzPUVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwNS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwNjogKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDctICogQHBoeWRldjogcGh5X2RldmljZSBzdHJ1Y3R1cmUgdG8gYmUgYWRkZWQgdG8gdGhlIE1ESU8gYnVzXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMDgtICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDk6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTExMC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQxLX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0MjpFWFBPUlRfU1lNQk9MKHBoeV9kZXZpY2VfcmVnaXN0ZXIpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQzLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE0OC0gKiBUaGlzIGRvZXNuJiMzOTt0IGZyZWUgdGhlIHBoeV9kZXZpY2UgaXRzZWxmLCBpdCBtZXJlbHkgcmV2ZXJzZXMgdGhlIGVmZmVjdHNcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTE0OTogKiBvZiBwaHlfZGV2aWNlX3JlZ2lzdGVyKCkuIFVzZSBwaHlfZGV2aWNlX2ZyZWUoKSB0byBmcmVlIHRoZSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTE1MC0gKiBhZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uXG4tLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jPTIxMDU9c3RhdGljIGludCBzZnBfc21fcHJvYmVfcGh5KHN0cnVjdCBzZnAgKnNmcCwgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMTIwLVxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIxMjE6XHRlcnIgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHBoeSk7XG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjEyMi1cdGlmIChlcnIpIHtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMTIzLVx0XHRwaHlfZGV2aWNlX2ZyZWUocGh5KTtcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMTI0Olx0XHRkZXZfZXJyKHNmcC1cdTAwM2VkZXYsIFwmIzM0O3BoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcXG5cJiMzNDssXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjEyNS1cdFx0XHRFUlJfUFRSKGVycikpO1xuLS1cbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfRldOT0RFX01ESU8pXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmg6MTI6aW50IGZ3bm9kZV9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmgtMTMtXHRcdFx0XHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbi0tXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmg9MTY9aW50IGZ3bm9kZV9tZGlvYnVzX3JlZ2lzdGVyX3BoeShzdHJ1Y3QgbWlpX2J1cyAqYnVzLFxuLS1cbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xOS0jZWxzZSAvKiBDT05GSUdfRldOT0RFX01ESU8gKi9cbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaDoyMDppbnQgZndub2RlX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0yMS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oPTQ5PWJvb2wgb2ZfcGh5X2lzX2ZpeGVkX2xpbmsoc3RydWN0IGRldmljZV9ub2RlICpucCk7XG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaDo1MDppbnQgb2ZfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmgtNTEtXHRcdFx0XHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcik7XG4tLVxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmg9MTQwPXN0YXRpYyBpbmxpbmUgYm9vbCBvZl9waHlfaXNfZml4ZWRfbGluayhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oLTE0NC1cbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oOjE0NTpzdGF0aWMgaW5saW5lIGludCBvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC0xNDYtXHRcdFx0XHRcdCAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxuLS1cbmluY2x1ZGUvbGludXgvcGh5Lmg9MjE3Nz1zdHJ1Y3QgcGh5X2RldmljZSAqZ2V0X3BoeV9kZXZpY2Uoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGJvb2wgaXNfYzQ1KTtcbmluY2x1ZGUvbGludXgvcGh5Lmg6MjE3ODppbnQgcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KTtcbmluY2x1ZGUvbGludXgvcGh5LmgtMjE3OS12b2lkIHBoeV9kZXZpY2VfZnJlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDYyMAoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IFBIWSBEcml2ZXIgTWF0Y2hpbmcgYW5kIFByb2JpbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBhIFBIWSBkcml2ZXIsIHNwZWNpZmljYWxseSBvbmUgZGVzaWduZWQgZm9yIHNvbWV0aGluZyBsaWtlIGEgTW90b3Jjb21tIFlUODgyNCwgYWN0dWFsbHkgZ2V0cyBtYXRjaGVkIGFuZCBwcm9iZWQgaW4gdGhlIGtlcm5lbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmdW5kYW1lbnRhbCBmbG93LiBSaWdodCwgbG9va2luZyBhdCBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AsIHRoZSBrZXkgZnVuY3Rpb25zIGFyZSBgcGh5X2J1c19tYXRjaGAgYW5kIGBwaHlfcHJvYmVgLiBOb3csIGZvciBkcml2ZXJzIGxpa2UgdGhlIGBtb3RvcmNvbW1fcGh5X2RydnNgLCBteSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgdGhlIG1hdGNoaW5nIHByb2Nlc3MgcmVsaWVzIG9uIGlkZW50aWZ5aW5nIHRoZSBQSFkgYmFzZWQgb24gaXRzIGBwaHlfaWRgLiBTcGVjaWZpY2FsbHksIGl0IHVzZXMgc29tZXRoaW5nIGxpa2UgYFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KWAuIFRoYXQmIzM5O3MgdGhlIGRyaXZlciYjMzk7cyB1bmlxdWUgaWRlbnRpZmllci4KCkJ1dCBoZXJlJiMzOTtzIHdoZXJlIEkgbmVlZCB0byBjbGFyaWZ5IHRoaW5ncy4gV2hlcmUgZXhhY3RseSBkb2VzIHRoaXMgYHBoeWRldmAgc3RydWN0dXJlIG9yaWdpbmF0ZSBmcm9tPyBJIGJlbGlldmUgaXQmIzM5O3MgZWl0aGVyIHRocm91Z2ggYW4gTURJTyBidXMgc2Nhbm5pbmcgcHJvY2Vzcywgb3IgcG90ZW50aWFsbHkgZnJvbSBhIGRldmljZSB0cmVlIHJlZ2lzdHJhdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4KCk5vdywgbXkgcmVhbCBxdWVzdGlvbiBpcyByZWdhcmRpbmcgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQuIERvZXMgUUVNVSwgb3IgZXZlbiB0aGUgZHJlYWRlZCBzeXprYWxsZXIsIHByb3ZpZGUgYSByZWFsaXN0aWMgc2NlbmFyaW8gd2l0aCBhbiBNRElPIGJ1cyBvciwgbW9yZSBzcGVjaWZpY2FsbHksIGFuIGFjdHVhbCBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBjaGlwIHRoYXQgSSBjYW4gaW50ZXJhY3Qgd2l0aD8gSXQmIzM5O3MgYSBsb25nIHNob3QsIGJ1dCBtYXliZS4uLiBXYWl0IGEgbWludXRlLi4uIENvdWxkIFVTQiBuZXQgb3IgVVNCIEV0aGVybmV0IGFkYXB0ZXJzIHBvdGVudGlhbGx5IGV4cG9zZSBvciB1dGlsaXplIE1ESU8gYnVzZXM/IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gSXQmIzM5O3MgYSBsb25nIHNob3QsIGJ1dCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYW55IHBvdGVudGlhbCBVU0IgZGV2aWNlcyB0aGF0IG1pZ2h0IHV0aWxpemUgcGh5bGliIG9yIGFuIE1ESU8gYnVzLiBJIHNob3VsZCBsb29rIGludG8gdGhvc2UgZHJpdmVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW9idXNfcmVnaXN0ZXIuKnVzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExODgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbCBpbiB0aGUgZmllbGQsIHNwZWFraW5nIGRpcmVjdGx5IHRvIGFub3RoZXIgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBVU0IgTmV0d29yayBEcml2ZXIgTGFuZHNjYXBlKioKCkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGRyaXZlcnMvbmV0L3VzYiBhcmVhLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIG5ldHdvcmsgYXNwZWN0IHRoYXQgdXRpbGl6ZXMgVVNCIGNvbm5lY3Rpb25zLiBNeSBpbml0aWFsIGZvY3VzIGlzIHRvIHBpbnBvaW50IGFueSBwb3RlbnRpYWwgdHJvdWJsZSBzcG90cyBvciBhcmVhcyByaXBlIGZvciBvcHRpbWl6YXRpb24gd2l0aGluIHRoaXMgc3BlY2lmaWMgcGFydCBvZiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byBnZXQgYSBoaWdoLWxldmVsIG92ZXJ2aWV3IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiwgbWFraW5nIHN1cmUgaXQgYWxpZ25zIHdpdGggdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIG5ldHdvcmsgZGF0YSBleGNoYW5nZSBhbmQgZGF0YSB0cmFuc2Zlci4gQW55IGlycmVndWxhcml0aWVzIGhlcmU/IENvbXBhdGliaWxpdHkgaXNzdWVzPyBMZXTigJlzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLiBJIHdhbnQgdG8gY2hlY2sgZm9yIGVmZmljaWVudCByZXNvdXJjZSBtYW5hZ2VtZW50LCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIG9yIHJhY2UgY29uZGl0aW9ucy4gS25vd2luZyB0aGUgYXJjaGl0ZWN0dXJlIG9mIG5ldHdvcmsgZGF0YSBtYW5hZ2VtZW50IGluc2lkZSBhIFVTQiBjb25uZWN0aW9uIGlzIG15IHByaW9yaXR5LiBMZXQmIzM5O3Mgc3RhcnQgdGhlIGV2YWx1YXRpb24gbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeV9kZXZpY2V8bWRpb2J1cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvYXNpeC5oPTE3OD1zdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXguaC0xODUtXHRzdHJ1Y3QgbWlpX2J1cyAqbWRpbztcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTg2Olx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTg3Olx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldl9pbnQ7XG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE4OC1cdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz02Njk9c3RhdGljIGludCBheDg4NzcyX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY3My1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2NzQ6XHRwcml2LVx1MDAzZW1kaW8gPSBtZGlvYnVzX2FsbG9jKCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjc1LVx0aWYgKCFwcml2LVx1MDAzZW1kaW8pXG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4Ni1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2ODc6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg4LVx0aWYgKHJldCkge1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OS1cdFx0bmV0ZGV2X2VycihkZXYtXHUwMDNlbmV0LCBcJiMzNDtDb3VsZCBub3QgcmVnaXN0ZXIgTURJTyBidXMgKGVyciAlZClcXG5cJiMzNDssIHJldCk7XG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NjkwOlx0XHRtZGlvYnVzX2ZyZWUocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02OTEtXHRcdHByaXYtXHUwMDNlbWRpbyA9IE5VTEw7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTY5Nz1zdGF0aWMgdm9pZCBheDg4NzcyX21kaW9fdW5yZWdpc3RlcihzdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSAqcHJpdilcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02OTgte1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY5OTpcdG1kaW9idXNfdW5yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjcwMDpcdG1kaW9idXNfZnJlZShwcml2LVx1MDAzZW1kaW8pO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcwMS19XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTcwMz1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9waHkoc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MDctXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzA4Olx0cHJpdi1cdTAwM2VwaHlkZXYgPSBtZGlvYnVzX2dldF9waHkocHJpdi1cdTAwM2VtZGlvLCBwcml2LVx1MDAzZXBoeV9hZGRyKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MDktXHRpZiAoIXByaXYtXHUwMDNlcGh5ZGV2KSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTczMS1cdCAqL1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjczMjpcdHByaXYtXHUwMDNlcGh5ZGV2X2ludCA9IG1kaW9idXNfZ2V0X3BoeShwcml2LVx1MDAzZW1kaW8sIEFYX0VNQkRfUEhZX0FERFIpO1xuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTczMy1cdGlmICghcHJpdi1cdTAwM2VwaHlkZXZfaW50KSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTc2Mj1zdGF0aWMgdm9pZCBheDg4NzcyX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjc2MzpcdFx0XHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03NjQtXHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTE4PXN0cnVjdCBheDg4MTcyYV9wcml2YXRlIHtcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTE5LVx0c3RydWN0IG1paV9idXMgKm1kaW87XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzoyMDpcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0yMS1cdGNoYXIgcGh5X25hbWVbUEhZX0lEX1NJWkVdO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTI5PXN0YXRpYyB2b2lkIGF4ODgxNzJhX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy0zMC17XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzozMTpcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBuZXRkZXYtXHUwMDNlcGh5ZGV2O1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzItXHRzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTYxPXN0YXRpYyBpbnQgYXg4ODE3MmFfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy02NS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjY2Olx0cHJpdi1cdTAwM2VtZGlvID0gbWRpb2J1c19hbGxvYygpO1xuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtNjctXHRpZiAoIXByaXYtXHUwMDNlbWRpbykge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc5LVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6ODA6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy04MS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy04OS1tZnJlZTpcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjkwOlx0bWRpb2J1c19mcmVlKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy05MS1cdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9OTQ9c3RhdGljIHZvaWQgYXg4ODE3MmFfcmVtb3ZlX21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTk4LVx0bmV0ZGV2X2luZm8oZGV2LVx1MDAzZW5ldCwgXCYjMzQ7ZGVyZWdpc3RlcmluZyBtZGlvIGJ1cyAlc1xcblwmIzM0OywgcHJpdi1cdTAwM2VtZGlvLVx1MDAzZWlkKTtcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjk5Olx0bWRpb2J1c191bnJlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzoxMDA6XHRtZGlvYnVzX2ZyZWUocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTEwMS19XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz00MTM9c3RydWN0IGxhbjc4eHhfbmV0IHtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ0MS1cdHN0cnVjdCBtdXRleFx0XHRkZXZfbXV0ZXg7IC8qIHNlcmlhbGlzZSBvcGVuL3N0b3Agd3J0IHN1c3BlbmQvcmVzdW1lICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjQ0MjpcdHN0cnVjdCBtdXRleFx0XHRtZGlvYnVzX211dGV4OyAvKiBmb3IgTURJTyBidXMgYWNjZXNzICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ0My1cdHVuc2lnbmVkIGludFx0XHRwaXBlX2luLCBwaXBlX291dCwgcGlwZV9pbnRyO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtNDU4LVx0dTMyXHRcdFx0Y2hpcHJldjtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6NDU5Olx0c3RydWN0IG1paV9idXNcdFx0Km1kaW9idXM7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ2MC1cdHBoeV9pbnRlcmZhY2VfdFx0XHRpbnRlcmZhY2U7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz05NDY9c3RhdGljIGludCBsYW43OHh4X2ZsdXNoX3J4X2ZpZm8oc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy05NTAtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjk1MTovKiBMb29wIHVudGlsIHRoZSByZWFkIGlzIGNvbXBsZXRlZCB3aXRoIHRpbWVvdXQgY2FsbGVkIHdpdGggbWRpb2J1c19tdXRleCBoZWxkICovXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjk1MjpzdGF0aWMgaW50IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy05NTMte1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MTU4Mj1zdGF0aWMgaW50IGxhbjc4eHhfbWFjX3Jlc2V0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU4Ny1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MTU4ODpcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNTg5LVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU5My1cdCAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoxNTk0Olx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU5NS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNjIyLWV4aXRfdW5sb2NrOlxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoxNjIzOlx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VtZGlvYnVzX211dGV4KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTYyNC1cbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTE5NDQ9c3RhdGljIGludCBsYW43OHh4X2luaXRfbWFjX2FkZHJlc3Moc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDExLS8qIE1ESU8gcmVhZCBhbmQgd3JpdGUgd3JhcHBlcnMgZm9yIHBoeWxpYiAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDEyOnN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeClcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAxMy17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDIxLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDIyOlx0bXV0ZXhfbG9jayhcdTAwMjZkZXYtXHUwMDNlbWRpb2J1c19tdXRleCk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMjMtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMjQtXHQvKiBjb25maXJtIE1JSSBub3QgYnVzeSAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDI1Olx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAyNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDM0LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDM1Olx0cmV0ID0gbGFuNzh4eF9tZGlvYnVzX3dhaXRfbm90X2J1c3koZGV2KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAzNi1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDQ1LWRvbmU6XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwNDY6XHRtdXRleF91bmxvY2soXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDQ3LVx0dXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi1cdTAwM2VpbnRmKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNTEtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwNTI6c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeCxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA1My1cdFx0XHRcdCB1MTYgcmVndmFsKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA2Mi1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA2MzpcdG11dGV4X2xvY2soXHUwMDI2ZGV2LVx1MDAzZW1kaW9idXNfbXV0ZXgpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDY0LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDY1LVx0LyogY29uZmlybSBNSUkgbm90IGJ1c3kgKi9cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA2NjpcdHJldCA9IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KGRldik7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNjctXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4MC1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA4MTpcdHJldCA9IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KGRldik7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwODItXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4NS1kb25lOlxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDg2Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNmRldi1cdTAwM2VtZGlvYnVzX211dGV4KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4Ny1cdHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtXHUwMDNlaW50Zik7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yMDkxPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvX2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDk1LVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDk2Olx0ZGV2LVx1MDAzZW1kaW9idXMgPSBtZGlvYnVzX2FsbG9jKCk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwOTc6XHRpZiAoIWRldi1cdTAwM2VtZGlvYnVzKSB7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwOTgtXHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7Y2FuJiMzOTt0IGFsbG9jYXRlIE1ESU8gYnVzXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMDEtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDI6XHRkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2Vwcml2ID0gKHZvaWQgKilkZXY7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDM6XHRkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2VyZWFkID0gbGFuNzh4eF9tZGlvYnVzX3JlYWQ7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDQ6XHRkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2V3cml0ZSA9IGxhbjc4eHhfbWRpb2J1c193cml0ZTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwNTpcdGRldi1cdTAwM2VtZGlvYnVzLVx1MDAzZW5hbWUgPSBcJiMzNDtsYW43OHh4LW1kaW9idXNcJiMzNDs7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDY6XHRkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2VwYXJlbnQgPSBcdTAwMjZkZXYtXHUwMDNldWRldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMDctXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDg6XHRzbnByaW50ZihkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcJiMzNDt1c2ItJTAzZDolMDNkXCYjMzQ7LFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTA5LVx0XHQgZGV2LVx1MDAzZXVkZXYtXHUwMDNlYnVzLVx1MDAzZWJ1c251bSwgZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2bnVtKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMTQtXHRcdC8qIHNldCB0byBpbnRlcm5hbCBQSFkgaWQgKi9cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjExNTpcdFx0ZGV2LVx1MDAzZW1kaW9idXMtXHUwMDNlcGh5X21hc2sgPSB+KDEgXHUwMDNjXHUwMDNjIDEpO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTE2LVx0XHRicmVhaztcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjEtXHRub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwmIzM0O21kaW9cJiMzNDspO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTIyOlx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYtXHUwMDNlbWRpb2J1cywgbm9kZSk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjMtXHRvZl9ub2RlX3B1dChub2RlKTtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjgtXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMjk6XHRuZXRkZXZfZGJnKGRldi1cdTAwM2VuZXQsIFwmIzM0O3JlZ2lzdGVyZWQgbWRpb2J1cyBidXMgJXNcXG5cJiMzNDssIGRldi1cdTAwM2VtZGlvYnVzLVx1MDAzZWlkKTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEzMC1cdHJldHVybiAwO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTMxLWV4aXQxOlxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTMyOlx0bWRpb2J1c19mcmVlKGRldi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEzMy1cdHJldHVybiByZXQ7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yMTM2PXN0YXRpYyB2b2lkIGxhbjc4eHhfcmVtb3ZlX21kaW8oc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMzcte1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTM4Olx0bWRpb2J1c191bnJlZ2lzdGVyKGRldi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEzOTpcdG1kaW9idXNfZnJlZShkZXYtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxNDAtfVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjQ3Nz1zdGF0aWMgdm9pZCBsYW43OHh4X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyNDc4Olx0XHRcdFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjQ3OS1cdFx0XHRcdHVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjYyNj1zdGF0aWMgaW50IGxhbjc4eHhfc2V0X2ZpeGVkX2xpbmsoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yNjQ4LSAqL1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyNjQ5OnN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbGFuNzh4eF9nZXRfcGh5KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yNjUwLXtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjY1MTpcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI2NTItXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI2NTMtXHQvKiBBdHRlbXB0IHRvIGxvY2F0ZSBhIFBIWSBvbiB0aGUgTURJTyBidXMgKi9cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjY1NDpcdHBoeWRldiA9IHBoeV9maW5kX2ZpcnN0KGRldi1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjY1NS1cbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTI3Njk9c3RhdGljIGludCBsYW43OHh4X2NvbmZpZ3VyZV9sZWRzX2Zyb21fZHQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYsXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjI3NzA6XHRcdFx0XHRcdCAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjc3MS17XG4tLVxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yODU4PXN0YXRpYyBpbnQgbGFuNzh4eF9waHlfaW5pdChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjg1OS17XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjI4NjA6XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yODYxLVx0aW50IHJldDtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI5MDQtXHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7Y2FuJiMzOTt0IGF0dGFjaCBQSFkgdG8gJXMsIGVycm9yICVwZVxcblwmIzM0OyxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjkwNTpcdFx0XHQgICBkZXYtXHUwMDNlbWRpb2J1cy1cdTAwM2VpZCwgRVJSX1BUUihyZXQpKTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjkwNi1cdFx0Z290byBwaHlsaW5rX3VuaW5pdDtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTQ2NTU9c3RhdGljIGludCBsYW43OHh4X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtNDY4OC1cdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2ZGV2LVx1MDAzZXJ4cV9vdmVyZmxvdyk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjQ2ODk6XHRtdXRleF9pbml0KFx1MDAyNmRldi1cdTAwM2VtZGlvYnVzX211dGV4KTtcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtNDY5MC1cdG11dGV4X2luaXQoXHUwMDI2ZGV2LVx1MDAzZWRldl9tdXRleCk7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9NjA9c3RydWN0IHNtc2M5NXh4X3ByaXYge1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTc0LVx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmlycWZ3bm9kZTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjc1Olx0c3RydWN0IG1paV9idXMgKm1kaW9idXM7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzo3NjpcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy03Ny1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqcG1fdGFzaztcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0yMTg9c3RhdGljIHZvaWQgc21zYzk1eHhfbWRpb193cml0ZShzdHJ1Y3QgdXNibmV0ICpkZXYsIGludCBwaHlfaWQsIGludCBpZHgsXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMjU5LVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MjYwOnN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMjYxLXtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0yOTYtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoyOTc6c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeClcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTI5OC17XG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMzAzLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MzA0OnN0YXRpYyBpbnQgc21zYzk1eHhfbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4LFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMzA1LVx0XHRcdFx0ICB1MTYgcmVndmFsKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTc5OD1zdGF0aWMgaW50IHNtc2M5NXh4X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTgwMi1cdHN0cnVjdCBzbXNjOTV4eF9wcml2ICpwZGF0YTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjgwMzpcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy04MDQtXHRzdHJ1Y3QgdXNibmV0ICpkZXY7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjE3LVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTIxODpcdHBkYXRhLVx1MDAzZW1kaW9idXMgPSBtZGlvYnVzX2FsbG9jKCk7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjE5Olx0aWYgKCFwZGF0YS1cdTAwM2VtZGlvYnVzKSB7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjIwLVx0XHRyZXQgPSAtRU5PTUVNO1xuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyMjktXHRpZiAocGRhdGEtXHUwMDNlaXNfaW50ZXJuYWxfcGh5KVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTIzMDpcdFx0cGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2VwaHlfbWFzayA9IH4oMXUgXHUwMDNjXHUwMDNjIFNNU0M5NVhYX0lOVEVSTkFMX1BIWV9JRCk7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjMxLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTIzMjpcdHBkYXRhLVx1MDAzZW1kaW9idXMtXHUwMDNlcHJpdiA9IGRldjtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzM6XHRwZGF0YS1cdTAwM2VtZGlvYnVzLVx1MDAzZXJlYWQgPSBzbXNjOTV4eF9tZGlvYnVzX3JlYWQ7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjM0Olx0cGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2V3cml0ZSA9IHNtc2M5NXh4X21kaW9idXNfd3JpdGU7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjM1Olx0cGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2VyZXNldCA9IHNtc2M5NXh4X21kaW9idXNfcmVzZXQ7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjM2Olx0cGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2VuYW1lID0gXCYjMzQ7c21zYzk1eHgtbWRpb2J1c1wmIzM0OztcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzc6XHRwZGF0YS1cdTAwM2VtZGlvYnVzLVx1MDAzZXBhcmVudCA9IFx1MDAyNmRldi1cdTAwM2V1ZGV2LVx1MDAzZWRldjtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyMzgtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjM5Olx0c25wcmludGYocGRhdGEtXHUwMDNlbWRpb2J1cy1cdTAwM2VpZCwgQVJSQVlfU0laRShwZGF0YS1cdTAwM2VtZGlvYnVzLVx1MDAzZWlkKSxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDAtXHRcdCBcJiMzNDt1c2ItJTAzZDolMDNkXCYjMzQ7LCBkZXYtXHUwMDNldWRldi1cdTAwM2VidXMtXHUwMDNlYnVzbnVtLCBkZXYtXHUwMDNldWRldi1cdTAwM2VkZXZudW0pO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0MS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyNDI6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0My1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjQ3LVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI0ODpcdHBkYXRhLVx1MDAzZXBoeWRldiA9IHBoeV9maW5kX2ZpcnN0KHBkYXRhLVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0OS1cdGlmICghcGRhdGEtXHUwMDNlcGh5ZGV2KSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI4OC1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyODk6XHRcdG5ldGRldl9lcnIoZGV2LVx1MDAzZW5ldCwgXCYjMzQ7Y2FuJiMzOTt0IGF0dGFjaCBQSFkgdG8gJXNcXG5cJiMzNDssIHBkYXRhLVx1MDAzZW1kaW9idXMtXHUwMDNlaWQpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI5MC1cdFx0Z290byB1bnJlZ2lzdGVyX21kaW87XG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI5Ny11bnJlZ2lzdGVyX21kaW86XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjk4Olx0bWRpb2J1c191bnJlZ2lzdGVyKHBkYXRhLVx1MDAzZW1kaW9idXMpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI5OS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEzMDAtZnJlZV9tZGlvOlxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTMwMTpcdG1kaW9idXNfZnJlZShwZGF0YS1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEzMDItXG4tLVxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTMxNz1zdGF0aWMgdm9pZCBzbXNjOTV4eF91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zilcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMzIxLVx0cGh5X2Rpc2Nvbm5lY3QoZGV2LVx1MDAzZW5ldC1cdTAwM2VwaHlkZXYpO1xuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTMyMjpcdG1kaW9idXNfdW5yZWdpc3RlcihwZGF0YS1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEzMjM6XHRtZGlvYnVzX2ZyZWUocGRhdGEtXHUwMDNlbWRpb2J1cyk7XG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMzI0LVx0aXJxX2Rpc3Bvc2VfbWFwcGluZyhpcnFfZmluZF9tYXBwaW5nKHBkYXRhLVx1MDAzZWlycWRvbWFpbiwgUEhZX0hXSVJRKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgyNjgKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiA0MTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTGluZSBvZiBJbnF1aXJ5OiBVU0IgR2FkZ2V0IEVtdWxhdGlvbiBhbmQgUEhZIElkZW50aWZpY2F0aW9uKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQhIEkgbmVlZCB0byByZS1ldmFsdWF0ZSBzb21ldGhpbmcgcmVnYXJkaW5nIFVTQiBnYWRnZXQgZW11bGF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIHRoZSBgcmF3X2dhZGdldGAgZHJpdmVyIGNhbiBlZmZlY3RpdmVseSBlbXVsYXRlIGEgVVNCLXRvLUV0aGVybmV0IGFkYXB0ZXIgbGlrZSBhbiBBU0lYIEFYODgxNzJBLCBTTVNDOTV4eCwgb3IgZXZlbiBhbiBBU0lYLWJhc2VkIGRldmljZSBsaWtlIHRoZSBMQU43OHh4LgoKSWYgc28sIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gSWYgSSYjMzk7bSBzdWNjZXNzZnVsbHkgZW11bGF0aW5nIG9uZSBvZiB0aGVzZSB2aWEgYHJhd19nYWRnZXRgIGFuZCB1c2luZyB0aGUgYGR1bW15X2hjZGAsIHdoYXQgaGFwcGVucyB3aGVuIHRoZSBNRElPIGJ1cyBjb21lcyBpbnRvIHBsYXk/IFJpZ2h0LCB0aGUgZGV2aWNlIHJlZ2lzdGVycyBhbiBNRElPIGJ1cyB3aXRoIGBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtJmd0O21kaW8pYC4KCkkgaGF2ZSB0byBkaXZlIGRlZXBlciBpbnRvIGBtZGlvYnVzX3JlZ2lzdGVyYCwgZXNwZWNpYWxseSB0aGUgYG1kaW9idXNfc2NhbmAgZnVuY3Rpb24uIEFzIEkgcmVjYWxsLCB0aGlzIGlzIHdoZXJlIHRoZSBzeXN0ZW0gdHJpZXMgdG8gZGV0ZXJtaW5lIHdoYXQmIzM5O3Mgb24gdGhlIE1ESU8gYnVzIGJ5IHJlYWRpbmcgYE1JSV9QSFlTSUQxYCBhbmQgYE1JSV9QSFlTSUQyYCB1c2luZyB0aGUgYGJ1cy0mZ3Q7cmVhZCgpYCBmdW5jdGlvbi4gVGhpcyBnZXRzIG1lIHRoaW5raW5nLi4uCgpOb3csIGhlcmUmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gV2hhdCBpZiB0aGUgZW11bGF0ZWQgVVNCIGRldmljZSAqcmVzcG9uZHMqIHdpdGggYXJiaXRyYXJ5IHZhbHVlcyBkdXJpbmcgdGhlIGBtZGlvYnVzX3NjYW5gPyBMZXQmIzM5O3Mgc2F5LCBpdCByZXR1cm5zIGEgUEhZIElELCBsaWtlIHRoZSBvbmUgZm9yIGEgWVQ4ODI0LCB3aGljaCBpcyBgUEhZX0lEX1lUODgyNGAgKDB4NGY1MWU4YjgpLiBJcyB0aGF0IHBvc3NpYmxlPyBJdCBzaG91bGQgYmUhCgpXYWl0IGEgbWludXRlLCBsZXQgbWUgcHVsbCB1cCB0aGUgY29kZSBmb3IgYHl0ODgyNF9wcm9iZWAhCgpgYGBjCnN0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCnsKCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhbXA7cGh5ZGV2LSZndDttZGlvLmRldjsKCXN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2OwoJaW50IHJldDsKCglyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTsKCWlmIChyZXQpCgkJcmV0dXJuIHJldDsKCglpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7CgkJcmV0ID0geXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UocGh5ZGV2KTsKCQlpZiAocmV0KQoJCQlyZXR1cm4gcmV0OwoJfQoKCXJldHVybiAwOwp9CmBgYAoKT2theSwgdGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCB0aGF0IGxpbmUgYGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO2AuIFRoaXMgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gIGlzIGRvaW5nLiBUaGlzIHNlZW1zIHRvIGJlIHRoZSBrZXkgc3RlcCBpbiBoYW5kbGluZyB0aGUgUEhZIGFzc29jaWF0aW9uLiBGcm9tIGhlcmUgSSBuZWVkIHRvIGxvb2sgYXQgd2hhdCBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCBkb2VzIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgUEhZIElELCBhbmQgdGhlbiBob3cgdGhhdCBpbXBhY3RzIHRoZSBlbnRpcmUgZW11bGF0ZWQgZGV2aWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTQ2Mzg9c3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDY0My1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo0NjQ0Olx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDY0NS1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM9NDA1PUVYUE9SVF9TWU1CT0xfR1BMKGRldm1fcGh5X3BhY2thZ2Vfam9pbik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDA3LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM6NDA4OiAqIGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbiAtIHJlc291cmNlIG1hbmFnZWQgb2ZfcGh5X3BhY2thZ2Vfam9pbigpXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy00MDktICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhpcyBQSFkgcGFja2FnZVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTQxNi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jOjQxNzppbnQgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTQxOC1cdFx0XHQgICAgIHNpemVfdCBwcml2X3NpemUpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDM4LX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jOjQzOTpFWFBPUlRfU1lNQk9MX0dQTChkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4pO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDQwLVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaD0zMj1pbnQgZGV2bV9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaC0zMy1cdFx0XHQgIGludCBiYXNlX2FkZHIsIHNpemVfdCBwcml2X3NpemUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oOjM0OmludCBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oLTM1LVx0XHRcdCAgICAgc2l6ZV90IHByaXZfc2l6ZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jPTY5ND1zdGF0aWMgaW50IHFjYTgwN3hfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNzAxLVxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jOjcwMjpcdHJldCA9IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO1xuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTcwMy1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYz0xOTU9c3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS94cG93ZXJzL2FjeDAwLmMtMjM1LVxuZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYzoyMzY6XHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIDApO1xuZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYy0yMzctXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDE3MwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcy4gSSYjMzk7bSBnb2luZyB0byBncmFiIHRoYXQgYGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbmAgZnVuY3Rpb24gZnJvbSBgZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmNgIHVzaW5nIHRoZSByZWFkLWZpbGUgY29tbWFuZC4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZXZpY2UtbWFuYWdlZCBQSFkgcGFja2FnZSBqb2luaW5nIHByb2Nlc3Mgd29ya3MuIEkgd2FudCB0byBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBhc3NvY2lhdGluZyBQSFlzIHdpdGggdGhlIHJlbGV2YW50IGRldmljZXMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IG1hbmFnZXMgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHdoZW4gUEhZIHBhY2thZ2VzIGFyZSBpbnRlZ3JhdGVkLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjAwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwNTpcdEVYUE9SVF9TWU1CT0xfR1BMKGRldm1fcGh5X3BhY2thZ2Vfam9pbik7XG4gNDA2Olx0XG4gNDA3Olx0LyoqXG4gNDA4Olx0ICogZGV2bV9vZl9waHlfcGFja2FnZV9qb2luIC0gcmVzb3VyY2UgbWFuYWdlZCBvZl9waHlfcGFja2FnZV9qb2luKClcbiA0MDk6XHQgKiBAZGV2OiBkZXZpY2UgdGhhdCBpcyByZWdpc3RlcmluZyB0aGlzIFBIWSBwYWNrYWdlXG4gNDEwOlx0ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4gNDExOlx0ICogQHByaXZfc2l6ZTogaWYgbm9uLXplcm8gYWxsb2NhdGUgdGhpcyBhbW91bnQgb2YgYnl0ZXMgZm9yIHByaXZhdGUgZGF0YVxuIDQxMjpcdCAqXG4gNDEzOlx0ICogTWFuYWdlZCBvZl9waHlfcGFja2FnZV9qb2luKCkuIFNoYXJlZCBzdG9yYWdlIGZldGNoZWQgYnkgdGhpcyBmdW5jdGlvbixcbiA0MTQ6XHQgKiBwaHlfcGFja2FnZV9sZWF2ZSgpIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkIG9uIGRyaXZlciBkZXRhY2guIFNlZVxuIDQxNTpcdCAqIG9mX3BoeV9wYWNrYWdlX2pvaW4oKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiA0MTY6XHQgKi9cbiA0MTc6XHRpbnQgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiA0MTg6XHRcdFx0XHQgICAgIHNpemVfdCBwcml2X3NpemUpXG4gNDE5Olx0e1xuIDQyMDpcdFx0c3RydWN0IHBoeV9kZXZpY2UgKipwdHI7XG4gNDIxOlx0XHRpbnQgcmV0O1xuIDQyMjpcdFxuIDQyMzpcdFx0cHRyID0gZGV2cmVzX2FsbG9jKGRldm1fcGh5X3BhY2thZ2VfbGVhdmUsIHNpemVvZigqcHRyKSxcbiA0MjQ6XHRcdFx0XHQgICBHRlBfS0VSTkVMKTtcbiA0MjU6XHRcdGlmICghcHRyKVxuIDQyNjpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiA0Mjc6XHRcbiA0Mjg6XHRcdHJldCA9IG9mX3BoeV9wYWNrYWdlX2pvaW4ocGh5ZGV2LCBwcml2X3NpemUpO1xuIDQyOTpcdFxuIDQzMDpcdFx0aWYgKCFyZXQpIHtcbiA0MzE6XHRcdFx0KnB0ciA9IHBoeWRldjtcbiA0MzI6XHRcdFx0ZGV2cmVzX2FkZChkZXYsIHB0cik7XG4gNDMzOlx0XHR9IGVsc2Uge1xuIDQzNDpcdFx0XHRkZXZyZXNfZnJlZShwdHIpO1xuIDQzNTpcdFx0fVxuIDQzNjpcdFxuIDQzNzpcdFx0cmV0dXJuIHJldDtcbiA0Mzg6XHR9XG4gNDM5Olx0RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKTtcbiA0NDA6XHRcbiA0NDE6XHRNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7UEhZIHBhY2thZ2Ugc3VwcG9ydFwmIzM0Oyk7XG4gNDQyOlx0TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA5NjYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBgb2ZfcGh5X3BhY2thZ2Vfam9pbmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGBvZl9waHlfcGFja2FnZV9qb2luYCwgd2hhdCYjMzk7cyAqdGhhdCogYWJvdXQ/JiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgaW4gdGhpcyBzeXN0ZW0uIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBpdCBwcm9iYWJseSByZWxhdGVzIHRvIHNvbWUgZnVuZGFtZW50YWwgYXNwZWN0IG9mIHRoZSBQSFkgbGF5ZXIsIHBlcmhhcHMgZGVhbGluZyB3aXRoIHRoZSBhZ2dyZWdhdGlvbiwgZGVhZ2dyZWdhdGlvbiwgb3IgY29vcmRpbmF0aW9uIG9mIHBoeXNpY2FsIGxheWVyIGRhdGEgdW5pdHMuIEdpdmVuIHRoZSBuYW1lLCAmIzM0O2pvaW4mIzM0OyBpcyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIHdpbGwgaW52b2x2ZSBzb21lIGZvcm0gb2YgYXNzZW1ibHkgb3IgY29tYmluaW5nIG9mIGVsZW1lbnRzLiBJcyBpdCByZWxhdGVkIHRvIGJ1cnN0IGFzc2VtYmx5LCBmcmFtZSBjb25jYXRlbmF0aW9uLCBwZXJoYXBzIHNvbWUgaGlnaGVyLWxldmVsIG11bHRpcGxleGluZyBzY2hlbWU/IFRoZSBgb2ZgIHByZWZpeCBzdWdnZXN0cyBpdCYjMzk7cyBhIHBhcnQgb2YgT3BlbkZsb3csIHNvIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgaG93IHRoaXMgZml0cyB3aXRoaW4gdGhlIE9wZW5GbG93IHByb3RvY29sJiMzOTtzIGFic3RyYWN0aW9uIG9mIHRoZSBQSFkgbGF5ZXIuIEkgbmVlZCB0byBxdWlja2x5IHJlY2FsbCBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWxldmFudCBPcGVuRmxvdyBzcGVjaWZpY2F0aW9ucyBhbmQgaG93IFBIWSBpbnRlcmFjdGlvbnMgYXJlIHR5cGljYWxseSBoYW5kbGVkIGluIHRoaXMgZW52aXJvbm1lbnQuIFdoYXQgYXJlIHRoZSBkZXBlbmRlbmNpZXM/IFdoZXJlIGRvZXMgdGhpcyBmdW5jdGlvbiBnZXQgY2FsbGVkPyBBbmQsIGNyaXRpY2FsbHksIHdoYXQgYXJlIHRoZSB1cHN0cmVhbSBhbmQgZG93bnN0cmVhbSBkYXRhIGZsb3dzIHRoaXMgZnVuY3Rpb24gaW1wYWN0cz8gUmlnaHQsIEkgbmVlZCB0byBsb29rIGludG8gaXQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3VyIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgb2ZfcGh5X3BhY2thZ2Vfam9pbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYz0yNzY9RVhQT1JUX1NZTUJPTF9HUEwocGh5X3BhY2thZ2Vfam9pbik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtMjk3LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM6Mjk4OmludCBvZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHNpemVfdCBwcml2X3NpemUpXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy0yOTkte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaD0yOT1pbnQgcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgYmFzZV9hZGRyLCBzaXplX3QgcHJpdl9zaXplKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaDozMDppbnQgb2ZfcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzaXplX3QgcHJpdl9zaXplKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaC0zMS12b2lkIHBoeV9wYWNrYWdlX2xlYXZlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTUxMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgUEhZIFBhY2thZ2UgSm9pbiBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkmIzM5O20gZ29pbmcgdG8gcHVsbCB1cCBgZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmNgIGFuZCB6ZXJvIGluIG9uIHRoYXQgYG9mX3BoeV9wYWNrYWdlX2pvaW5gIGZ1bmN0aW9uIGFyb3VuZCBsaW5lIDI5OC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIHN5c3RlbSBpcyBoYW5kbGluZyB0aGUgaW50ZWdyYXRpb24gb2YgdGhlc2UgUEhZIHBhY2thZ2VzLCBwYXJ0aWN1bGFybHkgd2l0aCB0aGUgZGV2aWNlIHRyZWUgaW50ZWdyYXRpb24uIEkmIzM5O20gZXhwZWN0aW5nIHRoaXMgZnVuY3Rpb24gdG8gYmUgdGhlIGNvcmUgb2YgYnJpbmdpbmcgdGhlc2UgUEhZcyBpbnRvIHRoZSBzeXN0ZW0gYWZ0ZXIgdGhleSYjMzk7dmUgYmVlbiBkZXNjcmliZWQgYnkgdGhlIGRldmljZSB0cmVlLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSByZWdpc3RyYXRpb24sIGJpbmRpbmcsIG9yIGluaXRpYWxpemF0aW9uIGxvZ2ljLiBUaGlzIGxpa2VseSBoYW5kbGVzIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgUEhZIGRyaXZlciBpdHNlbGYgYW5kIHRoZSBkZXZpY2UgdHJlZSBpbmZvcm1hdGlvbi4gSSYjMzk7bSBjdXJpb3VzIGlmIGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvciByZXNvdXJjZSBhbGxvY2F0aW9uLCBJUlEgc2V0dXAsIG9yIHByb2JpbmcgdGhlIFBIWSYjMzk7cyBjYXBhYmlsaXRpZXMgYmFzZWQgb24gd2hhdCYjMzk7cyBkZWNsYXJlZCBpbiB0aGUgZGV2aWNlIHRyZWUgbm9kZS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBleGFjdGx5IGhvdyBpdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjk1Olx0ICogbm9kZSBpcyBub3QgZGV0ZWN0ZWQgb3IgaXMgbm90IHZhbGlkIG9yIGRvZXNuJiMzOTt0IG1hdGNoIHRoZSBleHBlY3RlZCBub2RlXG4gMjk2Olx0ICogbmFtZSBmb3IgUEhZIHBhY2thZ2UuXG4gMjk3Olx0ICovXG4gMjk4Olx0aW50IG9mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc2l6ZV90IHByaXZfc2l6ZSlcbiAyOTk6XHR7XG4gMzAwOlx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBwaHlkZXYtXHUwMDNlbWRpby5kZXYub2Zfbm9kZTtcbiAzMDE6XHRcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFja2FnZV9ub2RlO1xuIDMwMjpcdFx0dTMyIGJhc2VfYWRkcjtcbiAzMDM6XHRcdGludCByZXQ7XG4gMzA0Olx0XG4gMzA1Olx0XHRpZiAoIW5vZGUpXG4gMzA2Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDMwNzpcdFxuIDMwODpcdFx0cGFja2FnZV9ub2RlID0gb2ZfZ2V0X3BhcmVudChub2RlKTtcbiAzMDk6XHRcdGlmICghcGFja2FnZV9ub2RlKVxuIDMxMDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzMTE6XHRcbiAzMTI6XHRcdGlmICghb2Zfbm9kZV9uYW1lX2VxKHBhY2thZ2Vfbm9kZSwgXCYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2VcJiMzNDspKSB7XG4gMzEzOlx0XHRcdHJldCA9IC1FSU5WQUw7XG4gMzE0Olx0XHRcdGdvdG8gZXhpdDtcbiAzMTU6XHRcdH1cbiAzMTY6XHRcbiAzMTc6XHRcdGlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihwYWNrYWdlX25vZGUsIFwmIzM0O3JlZ1wmIzM0OywgXHUwMDI2YmFzZV9hZGRyKSkge1xuIDMxODpcdFx0XHRyZXQgPSAtRUlOVkFMO1xuIDMxOTpcdFx0XHRnb3RvIGV4aXQ7XG4gMzIwOlx0XHR9XG4gMzIxOlx0XG4gMzIyOlx0XHRyZXQgPSBwaHlfcGFja2FnZV9qb2luKHBoeWRldiwgYmFzZV9hZGRyLCBwcml2X3NpemUpO1xuIDMyMzpcdFx0aWYgKHJldClcbiAzMjQ6XHRcdFx0Z290byBleGl0O1xuIDMyNTpcdFxuIDMyNjpcdFx0cGh5ZGV2LVx1MDAzZXNoYXJlZC1cdTAwM2VucCA9IHBhY2thZ2Vfbm9kZTtcbiAzMjc6XHRcbiAzMjg6XHRcdHJldHVybiAwO1xuIDMyOTpcdGV4aXQ6XG4gMzMwOlx0XHRvZl9ub2RlX3B1dChwYWNrYWdlX25vZGUpO1xuIDMzMTpcdFx0cmV0dXJuIHJldDtcbiAzMzI6XHR9XG4gMzMzOlx0RVhQT1JUX1NZTUJPTF9HUEwob2ZfcGh5X3BhY2thZ2Vfam9pbik7XG4gMzM0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMzUwCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYG9mX3BoeV9wYWNrYWdlX2pvaW5gIEZ1bmN0aW9uIGFuZCBJdHMgSW1wbGljYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBvZl9waHlfcGFja2FnZV9qb2luYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCYjMzk7cyB1c2VkIHdpdGggYHl0ODgyNGAuIFRoZSBjb2RlIGZpcnN0IGdyYWJzIHRoZSBkZXZpY2Ugbm9kZSBmcm9tIGBwaHlkZXYtJmd0O21kaW8uZGV2Lm9mX25vZGVgLiBJZiB0aGlzIGlzIE5VTEwsIHdoaWNoIEkmIzM5O20gYXNzdW1pbmcgaXMgdGhlIHR5cGljYWwgc2NlbmFyaW8gd2l0aG91dCBEZXZpY2VUcmVlIChsaWtlIG9uIHg4Ni9hbWQ2NCBzeXN0ZW1zIHdoZW4gdXNpbmcgTURJTyBzY2FubmluZyBpbiBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIFVTQiksIGl0IGltbWVkaWF0ZWx5IHJldHVybnMgYC1FSU5WQUxgLgoKQW5kIHRoZW4gbG9vayBhdCBgeXQ4ODI0X3Byb2JlYDogIElmIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gIHJldHVybnMgYC1FSU5WQUxgLCB0aGUgYHl0ODgyNF9wcm9iZWAgZnVuY3Rpb24gKmltbWVkaWF0ZWx5KiByZXR1cm5zLiBTbywgYmFzaWNhbGx5LCBpZiB0aGUgZGV2aWNlIG5vZGUgbG9va3VwIGZhaWxzLCB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIGp1c3QgYmFpbHMgb3V0LiBUaGlzIG1lYW5zIG5vbmUgb2YgdGhlIGB5dDg4MjRfKmAgZnVuY3Rpb25zIHdpbGwgZXZlciBnZXQgY2FsbGVkIQoKTm93LCB0aGUgcXVlc3Rpb24gYmVjb21lczogaXMgRGV2aWNlVHJlZSBldmVuICphdmFpbGFibGUqIG9uIHg4Nl82NCwgZXNwZWNpYWxseSB3aXRoaW4gc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyPyAgTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IG9uIGFtZDY0LCBBQ1BJIGlzIHRoZSBzdGFuZGFyZCBhbmQgT3BlbkZpcm13YXJlL0RldmljZVRyZWUgKGBDT05GSUdfT0ZgKSBpcyB0eXBpY2FsbHkgZGlzYWJsZWQgb3IgYWJzZW50LCBlc3BlY2lhbGx5IHRob3NlIGBldGhlcm5ldC1waHktcGFja2FnZWAgbm9kZXMuIEkmIzM5O20gcmVhc29uYWJseSBzdXJlIHN5emthbGxlciBydW5zIGEgc3RhbmRhcmQgYW1kNjQga2VybmVsIGluIFFFTVUgKndpdGhvdXQqIERULgoKSnVzdCB0byBiZSBzdXJlLCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIChgQ09ORklHX09GYCkgb24geDg2L2FtZDY0Li4uIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBpbmRlZWQgZGlzYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPRlxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9vZi9LY29uZmlnPTg9Y29uZmlnIEJVSUxUSU5fRFRCX0FMTFxuLS1cbmRyaXZlcnMvb2YvS2NvbmZpZy0xMC1cbmRyaXZlcnMvb2YvS2NvbmZpZzoxMTptZW51Y29uZmlnIE9GXG5kcml2ZXJzL29mL0tjb25maWctMTItXHRib29sIFwmIzM0O0RldmljZSBUcmVlIGFuZCBPcGVuIEZpcm13YXJlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMzMDIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlbHZpbmcgaW50byB0aGUgTW90b3Jjb21tIFlUODgyNCoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kISBCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSBuZWVkIHRvIGNvbmZpcm0gc29tZXRoaW5nICpyZWFsbHkqIGZ1bmRhbWVudGFsOiBpcyB0aGUgTW90b3Jjb21tIFlUODgyNCBhY3R1YWxseSBhIHBoeXNpY2FsIGhhcmR3YXJlIEV0aGVybmV0IFBIWT8gVGhlIHBhdGNoIGRvY3VtZW50YXRpb24gKnNob3VsZCogY2xhcmlmeSB0aGlzLiBBaCwgaGVyZSB3ZSBnbyEgWWVzLCB0aGUgcGF0Y2ggZXhwbGljaXRseSBzdGF0ZXM6ICYjMzQ7TW90b3Jjb21tIFlUODgyNCBFdGhlcm5ldCBQSFkgaXMgYSBQSFkgcGFja2FnZSBvZiA0IFBIWXMuJiMzNDsgRXhjZWxsZW50LiBBbmQgaXQgY29udGludWVzLCAmIzM0O0VuYWJsZXMgc3VwcG9ydCBmb3IgTW90b3Jjb21tIG5ldHdvcmsgUEhZcy4gQ3VycmVudGx5IHN1cHBvcnRzIFlUODV4eCBHaWdhYml0IEV0aGVybmV0IFBIWXMgYW5kIFlUODgyNCA0ICogMi41RyBQSFkuJiMzNDsgVGhhdCYjMzk7cyBnb29kIGNvbmZpcm1hdGlvbi4KCk5vdywgYSBuZXcgZGV0YWlsIHN1cmZhY2VzIGluIHRoZSBjb2RlIHdoaWNoIEkgbmVlZCB0byBnZXQgbXkgaGVhZCBhcm91bmQuIFdoYXQgYWJvdXQgdGhpcyBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgdGhpbmcgdGhhdCB3YXMgYWRkZWQgaW4gYGRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNgPyBXaGVyZSBleGFjdGx5IGlzIHRoYXQgZnVuY3Rpb24gY2FsbGVkIGZyb20gd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgRXRoZXJuZXQgUEhZIGRyaXZlciBzdHJ1Y3R1cmU/IFRpbWUgdG8gdXNlIG15IGZhdm9yaXRlIHRvb2w6IGdyZXBwZXIhIEkmIzM5O2xsIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjAxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTc3Nz1zdGF0aWMgaW50IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg0LVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjc4NTpcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg2LVx0XHQocGh5ZGV2LCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9ODQwPXN0YXRpYyBpbnQgeXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTg0Ny1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo4NDg6XHRyZXR1cm4gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtODQ5LVx0XHRcdFx0XHQgICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM9OTc4PXN0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTIzMS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMjMyOlx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEpO1xuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyMzMtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjQ0LVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjEyNDU6XHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjQ2LVx0XHRcdFx0XHQgICBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xMjU3LWVycl9yZXN0b3JlX25vcm1hbDpcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMjU4Olx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyNTktXHRcdFx0XHRcdCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz0xNTE3PXN0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MDEtXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTcwMjpcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xKTtcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzAzLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcxNC1cbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNzE1Olx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcxNi1cdFx0XHRcdFx0ICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcyOC1lcnJfcmVzdG9yZV9ub3JtYWw6XG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTcyOTpcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzMwLVx0XHRcdFx0XHQgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jPTE0MDk9RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQxMS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQxMjogKiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIC0gY29uZmlndXJlIHRlbXBsYXRlIHRlc3Rtb2RlIHJlZ2lzdGVyc1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDEzLSAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQyMC0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQyMTppbnQgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgdGVzdF9tb2RlKVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDIyLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MzItfVxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYzoxNDMzOkVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDM0LVxuLS1cbmluY2x1ZGUvbGludXgvcGh5Lmg9MjM1OT1pbnQgZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgYm9vbCBlbmFibGUpO1xuaW5jbHVkZS9saW51eC9waHkuaDoyMzYwOmludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpO1xuaW5jbHVkZS9saW51eC9waHkuaC0yMzYxLWludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTA2MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBtb3RvcmNvbW0uY2AgQ2hhbmdlcyoqCgpPa2F5LCBzbyBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgaXMgKm9ubHkqIGNhbGxlZCBieSB0aGUgeXQ4ODI0IGZ1bmN0aW9ucyBpbiBgbW90b3Jjb21tLmNgLiBUaGF0JiMzOTtzIGdvb2QgdG8ga25vdy4gQnV0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYHl0cGh5X3NldF93b2xgIGFsc28gaW4gYG1vdG9yY29tbS5jYC4gTGV0JiMzOTtzIGp1bXAgaW50byBsaW5lcyA2MjItNjMyIG9mIGBtb3RvcmNvbW0uY2AgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZ1bmN0aW9uJiMzOTtzIHN0cnVjdHVyZS4gQWgsIGFuZCB3aGF0IHdhcyB0aGF0IHBhdGNoJiMzOTtzIGltcGFjdCBvbiBgeXRwaHlfc2V0X3dvbGA/IFRpbWUgdG8gcHVsbCB1cCB0aGUgYGdpdCBkaWZmYCBmb3IgdGhhdCBmdW5jdGlvbiBpbiBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYC4KCkhtbSwgdGhpcyBsb29rcyBpbnRlcmVzdGluZy4gSXQgc2VlbXMgbGlrZSB0aGUgcGF0Y2ggc2ltcGx5IGFkZGVkIHRoZSBsaW5lIGBpZiAocmV0ICZsdDsgMCkgZ290byBlcnJfcmVzdG9yZV9wYWdlO2AgcmlnaHQgYWZ0ZXIgZGlzYWJsaW5nIHRoZSBXT0wgaW50ZXJydXB0LiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBlcnJvciBoYW5kbGluZyBwcm9jZWR1cmUuIExldCYjMzk7cyBtYWtlIHN1cmUsIGhvd2V2ZXIsIGFuZCByZXZpZXcgdGhlIGNvZGUgYmVmb3JlIGFuZCBhZnRlciB0aGUgY2hhbmdlIGluIGB5dHBoeV9zZXRfd29sYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFx0XHR2YWwgPSBZVFBIWV9XQ1JfRU5BQkxFIHwgWVRQSFlfV0NSX0lOVFJfU0VMO1xuIDcwMTpcdFx0XHR2YWwgfD0gWVRQSFlfV0NSX1RZUEVfUFVMU0UgfCBZVFBIWV9XQ1JfUFVMU0VfV0lEVEhfNjcyTVM7XG4gNzAyOlx0XHRcdHJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVFBIWV9XT0xfQ09ORklHX1JFRywgbWFzaywgdmFsKTtcbiA3MDM6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3MDQ6XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4gNzA1Olx0XG4gNzA2Olx0XHRcdC8qIEVuYWJsZSBXT0wgaW50ZXJydXB0ICovXG4gNzA3Olx0XHRcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLCAwLFxuIDcwODpcdFx0XHRcdFx0ICAgWVRQSFlfSUVSX1dPTCk7XG4gNzA5Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNzEwOlx0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuIDcxMTpcdFxuIDcxMjpcdFx0fSBlbHNlIHtcbiA3MTM6XHRcdFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg1MjFfUlNTUl9VVFBfU1BBQ0UpO1xuIDcxNDpcdFx0XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4gNzE1Olx0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuIDcxNjpcdFxuIDcxNzpcdFx0XHQvKiBEaXNhYmxlIFdPTCBmZWF0dXJlICovXG4gNzE4Olx0XHRcdG1hc2sgPSBZVFBIWV9XQ1JfRU5BQkxFIHwgWVRQSFlfV0NSX0lOVFJfU0VMO1xuIDcxOTpcdFx0XHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVRQSFlfV09MX0NPTkZJR19SRUcsIG1hc2ssIDApO1xuIDcyMDpcdFxuIDcyMTpcdFx0XHQvKiBEaXNhYmxlIFdPTCBpbnRlcnJ1cHQgKi9cbiA3MjI6XHRcdFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsXG4gNzIzOlx0XHRcdFx0XHQgICBZVFBIWV9JRVJfV09MLCAwKTtcbiA3MjQ6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA3MjU6XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4gNzI2Olx0XHR9XG4gNzI3Olx0XG4gNzI4Olx0ZXJyX3Jlc3RvcmVfcGFnZTpcbiA3Mjk6XHRcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4gNzMwOlx0fVxuIDczMTpcdFxuIDczMjpcdC8qKlxuIDczMzpcdCAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgUEhZODgyNCByZWcgcGFnZVxuIDczNDpcdCAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4gNzM1Olx0ICpcbiA3MzY6XHQgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvXG4gNzM3Olx0ICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4gNzM4Olx0ICovXG4gNzM5Olx0c3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDExOjAxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NTExCgkJCQkJCQlvdXRwdXQ6IDE5MQoJCQkJCQkJdGhvdWdodHM6IDIxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgUGF0Y2ggUmVhY2hhYmlsaXR5IGluIGEgRnV6emluZyBDb250ZXh0KioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgdGhlIHBvaW50bGVzcyBhZGRpdGlvbiBpbiBgeXRwaHlfc2V0X3dvbGAuIEVzc2VudGlhbGx5LCBpdCBhZGRlZCBhIGNoZWNrIHRoYXQgd2FzIGFscmVhZHkgaW1wbGljaXRseSB0aGVyZSwgYSBjbGFzc2ljIG5vLW9wLiBCdXQgdGhlIGNvcmUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2AgYXJlIGFjY2Vzc2libGUgdmlhIGZ1enppbmcuCgpNeSBwcmltYXJ5IGNvbmNlcm4sIHdoaWNoIEkgbmVlZCB0byByZXNvbHZlLCBpcyB3aGV0aGVyIGl0IGlzICYjMzQ7U3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlLiYjMzQ7IEkmIzM5O20gdmVyeSBmYW1pbGlhciB3aXRoIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LCBzbyBsZXQmIzM5O3MgdXNlIHRoYXQga25vd2xlZGdlIGhlcmU6IFNwZWNpZmljYWxseSwgd2hldGhlciB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkgZHJpdmVyICpyZXF1aXJlcyogcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpc24mIzM5O3QgZW11bGF0ZWQgYnkgdGhlIHN0YW5kYXJkIFFFTVUgc2V0dXAgSSYjMzk7bSB0ZXN0aW5nIHdpdGguCgpJIGtub3cgdGhhdCBQSFkgZHJpdmVycywgYnkgZGVmaW5pdGlvbiwgbWFuYWdlIGV4dGVybmFsIEV0aGVybmV0IHRyYW5zY2VpdmVyIGNoaXBzLiBUaGUgWVQ4ODI0IGlzIHN1Y2ggYSBjaGlwIGZyb20gYSByZWFsIHNlbWljb25kdWN0b3IgY29tcGFueS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IFFFTVUgb24geDg2L2FtZDY0IGVtdWxhdGVzIEludGVsIChlMTAwMC9lMTAwMGUpLCBWaXJ0aW8sIGFuZCBSZWFsdGVrIGhhcmR3YXJlLCBidXQgbm9uZSBvZiB0aGVzZSB1c2UgUEhZcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5IHRoZSBrZXJuZWwmIzM5O3MgcGh5bGliLiBUaGVyZWZvcmUsIG5vIHBoeXNpY2FsIE1ESU8gYnVzICh1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggUEhZcykgaXMgZW11bGF0ZWQsIG1ha2luZyB0aGlzIGFuIGltbWVkaWF0ZSByZWQgZmxhZy4KClRoZSBjcml0aWNhbCBwaWVjZSBoZXJlIGlzIHRoZSB1c2Ugb2YgRGV2aWNlIFRyZWUgKERUKS4gVGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uICpleHBsaWNpdGx5KiB1c2VzIGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gIGFuZCBleHBlY3RzIGFuICYjMzQ7ZXRoZXJuZXQtcGh5LXBhY2thZ2UmIzM0OyBub2RlIGluIHRoZSBEVC4gV2l0aG91dCBEVCwgb3IgYSBzcGVjaWZpYyBEVCBiaW5kaW5nIGZvciBhIG1vdG9yY29tbSBZVDg4MjQsIHRoZSBwcm9iZSBmYWlscyBpbW1lZGlhdGVseS4gRXZlbiBpZiBhIG1vY2sgTURJTyBidXMgd2VyZSBzb21laG93IHRyaWdnZXJlZCwgdGhlIGRyaXZlciB3b3VsZCBmYWlsIGFzIHRoZSBPRiBub2RlIGlzIGV4cGVjdGVkIHRvIGJlIHByZXNlbnQsIGFuZCBpdCBpcyBub3QgaW4gdGhlIGNvbnRleHQgb2YgYW1kNjQgJiM0Mzsgc3RhbmRhcmQgUUVNVS4KCkZ1cnRoZXJtb3JlLCBgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZWAgd2l0aGluIHRoaXMgZHJpdmVyIGFwcGVhcnMgdG8gYmUgKmV4Y2x1c2l2ZWx5KiBjYWxsZWQgYnkgdGhpcyBkcml2ZXI7IG5vIG90aGVyIGtlcm5lbCBjb2RlIGNhbGxzIGl0LiBNZWFuaW5nIHRoYXQsIHRoaXMgcGF0Y2ggaXMgb25seSByZWxldmFudCB0byBwaHlzaWNhbCBNb3RvcmNvbW0gaGFyZHdhcmUgd2l0aCBzcGVjaWZpYyBEZXZpY2UgVHJlZSBjb25maWd1cmF0aW9ucy4KClRoZSBjaGFuZ2VzIGluIGB5dHBoeV9zZXRfd29sYCBhcmUgdWx0aW1hdGVseSBpbmNvbnNlcXVlbnRpYWw7IHRoaXMgZHJpdmVyIGlzIHVucmVhY2hhYmxlIGFueXdheS4gSSBncmVwcGVkIHRoZSBjb2RlYmFzZSBhbmQgY29uZmlybWVkIHRoYXQgYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgIGlzbiYjMzk7dCBjYWxsZWQgYW55d2hlcmUgZWxzZS4KCkhlbmNlLCBJIGNvbmNsdWRlIHRoZSBjaGFuZ2VzIGFyZSBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgd2l0aGluIGEgc3RhbmRhcmQgUUVNVSBmdXp6aW5nIGNvbnRleHQuClRodXMsICoqV29ydGhGdXp6aW5nID0gZmFsc2UuKioKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMTE6MDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41RyBFdGhlcm5ldCBQSFkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGFuZCBhZGRzIGFuIGFzc29jaWF0ZWQgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy4gVGhlIG1vZGlmaWVkIGNvZGUgdGFyZ2V0cyBhIHNwZWNpZmljIHBoeXNpY2FsIEV0aGVybmV0IFBIWSB0cmFuc2NlaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBzcGVjaWZpYyBEZXZpY2UgVHJlZSBkZXNjcmlwdGlvbiAoJiMzOTtldGhlcm5ldC1waHktcGFja2FnZSYjMzk7KSwgd2hpY2ggaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgeDg2XzY0L1FFTVUgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZSBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpcyBzb2xlbHkgY2FsbGVkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLCBhbmQgcHJvYmUgaW1tZWRpYXRlbHkgZmFpbHMgd2l0aG91dCB0aGUgT0Ygbm9kZS4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41RyBFdGhlcm5ldCBQSFkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGFuZCBhZGRzIGFuIGFzc29jaWF0ZWQgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy4gVGhlIG1vZGlmaWVkIGNvZGUgdGFyZ2V0cyBhIHNwZWNpZmljIHBoeXNpY2FsIEV0aGVybmV0IFBIWSB0cmFuc2NlaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBzcGVjaWZpYyBEZXZpY2UgVHJlZSBkZXNjcmlwdGlvbiAoJiMzOTtldGhlcm5ldC1waHktcGFja2FnZSYjMzk7KSwgd2hpY2ggaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgeDg2XzY0L1FFTVUgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZSBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpcyBzb2xlbHkgY2FsbGVkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLCBhbmQgcHJvYmUgaW1tZWRpYXRlbHkgZmFpbHMgd2l0aG91dCB0aGUgT0Ygbm9kZS4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAxMTowMTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMTA6NTk6NDkuNzg0MTA0NzY1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MzE4MjgyNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgcXVhZC1wb3J0IDIuNUcgRXRoZXJuZXQgUEhZIGluIGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBhbmQgYWRkcyBhbiBhc3NvY2lhdGVkIGhlbHBlciBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIGluIGRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMuIFRoZSBtb2RpZmllZCBjb2RlIHRhcmdldHMgYSBzcGVjaWZpYyBwaHlzaWNhbCBFdGhlcm5ldCBQSFkgdHJhbnNjZWl2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBhbmQgc3BlY2lmaWMgRGV2aWNlIFRyZWUgZGVzY3JpcHRpb24gKCdldGhlcm5ldC1waHktcGFja2FnZScpLCB3aGljaCBpcyBub3QgcHJlc2VudCBvciBlbXVsYXRlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCB4ODZfNjQvUUVNVSBmdXp6aW5nIGVudmlyb25tZW50cy4gVGhlIGhlbHBlciBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIGlzIHNvbGVseSBjYWxsZWQgYnkgdGhlIFlUODgyNCBkcml2ZXIsIGFuZCBwcm9iZSBpbW1lZGlhdGVseSBmYWlscyB3aXRob3V0IHRoZSBPRiBub2RlLiBUaGVyZWZvcmUsIHRoZSBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjU5OjQ5Ljc4NDEzNDMxNVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ0MTA1OTA3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGFlMzFlYTFhNmI1MmM4NjhiOWM3YTc0OTYxMjg2MWYwYzE3MmJlOWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTA6NTk6NDggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTNlOWY3NjU0MDRhM1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbFxcbkBAIC0wLDAgKzEsNTkgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sI1xcbiskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCNcXG4rXFxuK3RpdGxlOiBNb3RvckNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWVxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBLeWxlIFN3aXRjaCBcXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cXHUwMDNlXFxuK1xcbitkZXNjcmlwdGlvbjpcXG4rICBNb3RvcmNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWSBpcyBhIFBIWSBwYWNrYWdlIG9mIDQgUEhZcy5cXG4rXFxuKyRyZWY6IGV0aGVybmV0LXBoeS1wYWNrYWdlLnlhbWwjXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIG1vdG9yY29tbSx5dDg4MjQtcGFja2FnZVxcbitcXG4rcmVxdWlyZWQ6XFxuKyAgLSBjb21wYXRpYmxlXFxuKyAgLSBwaHktbW9kZVxcbisgIC0gcmVnXFxuK1xcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXFxuK1xcbitleGFtcGxlczpcXG4rICAtIHxcXG4rICAgIG1kaW8ge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldC1waHktcGFja2FnZUAwIHtcXG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcXHUwMDNjMVxcdTAwM2U7XFxuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXFxcIm1vdG9yY29tbSx5dDg4MjQtcGFja2FnZVxcXCI7XFxuKyAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M5XFx1MDAzZTtcXG4rXFxuKyAgICAgICAgICAgIHBoeS1tb2RlID0gXFxcImludGVybmFsXFxcIjtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA0IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M0XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA1IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M1XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA2IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M2XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rXFxuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA3IHtcXG4rICAgICAgICAgICAgICAgIHJlZyA9IFxcdTAwM2M3XFx1MDAzZTtcXG4rICAgICAgICAgICAgfTtcXG4rICAgICAgICB9O1xcbisgICAgfTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWcgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xcbmluZGV4IGQzODM1NTk3ZTM3OTUuLjk5NmQ3NWFmZWQ0NDYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvS2NvbmZpZ1xcbkBAIC0zNjEsOSArMzYxLDEwIEBAIGNvbmZpZyBNSUNST1NFTUlfUEhZXFxuIFxcbiBjb25maWcgTU9UT1JDT01NX1BIWVxcbiBcXHR0cmlzdGF0ZSBcXFwiTW90b3Jjb21tIFBIWXNcXFwiXFxuK1xcdHNlbGVjdCBQSFlfUEFDS0FHRVxcbiBcXHRoZWxwXFxuIFxcdCAgRW5hYmxlcyBzdXBwb3J0IGZvciBNb3RvcmNvbW0gbmV0d29yayBQSFlzLlxcbi1cXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzLlxcbitcXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzIGFuZCBZVDg4MjQgNCAqIDIuNUcgUEhZLlxcbiBcXG4gY29uZmlnIE5BVElPTkFMX1BIWVxcbiBcXHR0cmlzdGF0ZSBcXFwiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBQSFlzXFxcIlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG5pbmRleCA5MGE0Zjg2ZjI3NThiLi5iNjA5NDhjOWNlODg0IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xcbkBAIC0xLDI0ICsxLDMxIEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xcbiAvKlxcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXFxuKyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLlxcbiAgKlxcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXFx1MDAzY3Bnd2lwZW91dEBnbWFpbC5jb21cXHUwMDNlXFxuICAqIEF1dGhvcjogRnJhbmsgXFx1MDAzY0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbVxcdTAwM2VcXG4rICogQXV0aG9yOiBLeWxlIFxcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVxcdTAwM2VcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZGlvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9uZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4gXFxuKyNpbmNsdWRlIFxcXCJwaHlsaWIuaFxcXCJcXG4rXFxuICNkZWZpbmUgUEhZX0lEX1lUODUxMVxcdFxcdDB4MDAwMDAxMGFcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXFx0XFx0MHgwMDAwMDExYVxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcXHRcXHQweDRmNTFlOTI4XFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVxcdFxcdDB4NGY1MWU5MWJcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1xcdFxcdDB4NGY1MWU5MWFcXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXFx0XFx0MHg0ZjUxZWExOVxcbisjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcXHRcXHQweDRmNTFlOGI4XFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xcbiAgKlxcdFVUUCBSZWdpc3RlciBzcGFjZVxcdHxcXHRGSUJFUiBSZWdpc3RlciBzcGFjZVxcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuQEAgLTMwLDYgKzM3LDE4IEBAXFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gICovXFxuIFxcbisvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcXG4rICogVVRQIFJlZ2lzdGVyIHNwYWNlIHwgVVNYR01JSSBSZWdpc3RlciBzcGFjZVxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqIHwgVVRQIE1JSVxcdFxcdHwgVVNYR01JSSBNSUlcXHRcXHR8XFxuKyAqIHwgVVRQIE1NRFxcdFxcdHxcXHRcXHRcXHR8XFxuKyAqIHwgVVRQIEV4dGVuZGVkXFx0fCBVU1hHTUlJIEV4dGVuZGVkXFx0fFxcbisgKiB8IFVUUCBUb3AgRXh0ZW5kZWRcXHR8IFVTWEdNSUkgVG9wIEV4dGVuZGVkXFx0fFxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqIHwgICBDb21tb24gVG9wIEV4dGVuZGVkXFx0XFx0XFx0fFxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuKyAqL1xcbitcXG4gLyogMHgxMCB+IDB4MTUgLCAweDFFIGFuZCAweDFGIGFyZSBjb21tb24gTUlJIHJlZ2lzdGVycyBvZiB5dCBwaHkgKi9cXG4gXFxuIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cXG5AQCAtMzgxLDYgKzQwMCwxMyBAQFxcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcXHQwXFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9GT1JDRV9CWDI1MDBcXHRcXHQxXFxuIFxcbisjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0tcXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFXFx0XFx0KDB4MSlcXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcXHRcXHRcXHQoMHgwKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfQ0ZHX01JTl9QUkVfTUFTS1xcdFxcdEdFTk1BU0soMywgMClcXG4rI2RlZmluZSBZVDg4MjRfU0RTX0VOX0ZJTExfUFJFXFx0XFx0XFx0QklUKDEzKVxcbisjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkdcXHRcXHQoMHg3KVxcbitcXG4gc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcXG4gXFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXFxuQEAgLTM5OSw2ICs0MjUsMTIgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcXG4gXFx0dTggcmVnX3BhZ2U7XFxuIH07XFxuIFxcbitzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2IHtcXG4rXFx0cGh5X2ludGVyZmFjZV90IGludGVyZmFjZV9tb2RlO1xcbitcXHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUHMgb3BlcmF0aW9uIGlzb2xhdGlvbiBkdXJpbmcgc3dhcCByZWcgc3BhY2UgKi9cXG4rXFx0c3RydWN0IG11dGV4IHNoYXJlZF9sb2NrO1xcbit9O1xcbitcXG4gLyoqXFxuICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuQEAgLTQzNyw2ICs0NjksNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxcbisgKlxcbisgKiBSZXR1cm5zOiB0aGUgdmFsdWUgb2YgcmVnbnVtIHJlZyBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gd3JpdGVcXG4rICogQHZhbDogcmVnaXN0ZXIgdmFsIHRvIHdyaXRlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZwaHlkZXYtXFx1MDAzZW1kaW8uYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKCkgLSB3cml0ZSBwYWdlIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEBwYWdlOiByZWcgcGFnZShZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkuXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdHJldCBcXHUwMDI2PSB+WVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcXG4rXFx0cmV0IHw9IChwYWdlIFxcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSyk7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCk7XFxuK1xcbitlcnI6XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4gLyoqXFxuICAqIHl0cGh5X3dyaXRlX2V4dCgpIC0gd3JpdGUgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG5AQCAtNjIyLDE1ICs3MTgsMTA1NyBAQCBzdGF0aWMgaW50IHl0cGh5X3NldF93b2woc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKVxcbiBcXHRcXHRtYXNrID0gWVRQSFlfV0NSX0VOQUJMRSB8IFlUUEhZX1dDUl9JTlRSX1NFTDtcXG4gXFx0XFx0cmV0ID0geXRwaHlfbW9kaWZ5X2V4dChwaHlkZXYsIFlUUEhZX1dPTF9DT05GSUdfUkVHLCBtYXNrLCAwKTtcXG4gXFxuLVxcdFxcdC8qIERpc2FibGUgV09MIGludGVycnVwdCAqL1xcbi1cXHRcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcXG4tXFx0XFx0XFx0XFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XFxuK1xcdFxcdC8qIERpc2FibGUgV09MIGludGVycnVwdCAqL1xcbitcXHRcXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBZVFBIWV9JTlRFUlJVUFRfRU5BQkxFX1JFRyxcXG4rXFx0XFx0XFx0XFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2VcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IGN1cnJlbnQgcmVnIHNwYWNlIG9mIHl0ODgyNCAoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9cXG4rICogWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBvbGRfcGFnZTtcXG4rXFxuK1xcdHJldHVybiBvbGRfcGFnZSBcXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7XFxuK307XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcGFnZTogUmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXHR1MTYgZGF0YTtcXG4rXFxuK1xcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIG9sZF9wYWdlO1xcbitcXHRkYXRhID0gb2xkX3BhZ2UgXFx1MDAyNiAofllUODgyNF9SU1NSX1NQQUNFX01BU0spO1xcbitcXHRkYXRhIHw9IHBhZ2U7XFxuK1xcbitcXHRyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XFxuK307XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBpbnZhbGlkIHRlc3QgbW9kZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXFxuK1xcdFxcdChwaHlkZXYsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKCkgLSBlbmFibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBlbmFibGUgc2RzIGlzb2xhdGUgKi9cXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfSVNPTEFURSwgQk1DUl9JU09MQVRFKTtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdC8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqL1xcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgVVRQIHNvZnRyZXNldC5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQsIEJNQ1JfUkVTRVQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0Lyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi9cXG4rXFx0cmV0dXJuIHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdCAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZCgpIC0gZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGVcXG4rICogYW5kIHNkcyBzb2Z0cmVzZXQuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXHRpbnQgcmV0ID0gLTE7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBzZHMgc29mdHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGUgKi9cXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0lTT0xBVEUsXFxuK1xcdFxcdFxcdCAgIEJNQ1JfUkVTRVQgXFx1MDAyNiB+Qk1DUl9JU09MQVRFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jayAqL1xcbitcXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChfX3BoeV9yZWFkLCB2YWwsXFxuK1xcdFxcdFxcdFxcdCh2YWwgXFx1MDAzYyAwKSB8fCAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLCA1MDAwMCwgNjAwMDAwLFxcbitcXHRcXHRcXHRcXHR0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHZhbDtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdC8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqL1xcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMoKSAtIGNhbGxlZCB0byBkbyBzdG9yZSB3b3JraW5nIHN0YXR1c1xcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHJldDogb3BlcmF0aW9uJ3MgcmV0dXJuIGNvZGVcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCByZXQpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByO1xcbitcXG4rXFx0LyogY29uZmlndXJlIG5vcm1hbCB0ZXN0IG1vZGUgKi9cXG4rXFx0ciA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSAhPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHIgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldCA9IHI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfc29mdF9yZXNldCgpIC0gY2FsbGVkIHRvIGRvIFBIWSBzb2Z0d2FyZSByZXNldFxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0LyogdXRwIHNvZnQgcmVzZXQgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3Nkc19pc29sYXRlX2FuZF9zb2Z0cmVzZXRfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK3JldHJ5OlxcbitcXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKCkgLSBjb25maWcgZXh0ZXJuYWwgcGh5ODgyNCB1dHAgaW5pdFxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcdGludCB2YWwgPSAwO1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0LyogcG93ZXIgZG93biAqL1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIHBsbCBjYWxpYnJhdGlvbiAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4MGNiYSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGEwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6YXRpb24gdXRwICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwMDEsIDB4MDAwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0LyogZW5hYmxlIG5pYmJsZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDAwMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIGlkbGUgZXJyIGRldGVjdCBlbmFibGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgMi41RyBsb25nIGNhYmxlIHBlcmZvcm1hbmNlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNzIsIDB4NTAzOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBmYXN0IHJldHJhaW4gKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM1OSwgMHgyMTQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDBjLCAweGMxYTApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdC8qIDIuNUcgdGVtcGxhdGUgdG9uZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDAwODMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZTIsIDB4MDE0OSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODAsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgMTAwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNDAsIDB4MzAxZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZSwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzAsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ3MSwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgMTAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDcxZiwgMHgwMDM2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmIsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgMTBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NiwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY3LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2OSwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwNTksIDB4NDA0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmUsIDB4NTMwOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDIsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGM4LCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YSwgMHg0MGZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ODIsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjE4LCAweDAwNmUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcdC8qIHJlc2V0ICovXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXFxuK1xcdFxcdFxcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcXG4rXFx0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwgISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9yZXN0b3JlOlxcbitcXHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSByO1xcbitcXHRyZXR1cm4gcmV0O1xcbitcXG4rZXJyX3Jlc3RvcmVfbm9ybWFsOlxcbitcXHRyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwpO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHIgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgciBcXHUwMDNjIDApXFxuK1xcdFxcdHJldCA9IHI7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgc2RzIGluaXRcXG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuKyAqXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBvbGRfcGFnZSA9IFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcXG4rXFx0aW50IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcXG4rXFx0aW50IHJldCA9IC0xO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogcmVhZCBlZnVzZSAqL1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExM2UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRlbHNlXFxuK1xcdFxcdHZhbF8xID0gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0ZWxzZVxcbitcXHRcXHR2YWxfMiA9IHJldDtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTE0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dmFsXzMgPSByZXQ7XFxuK1xcbitcXHQvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiZSwgMHgwMDBkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIGFuYWxvZyBDRFIgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0Lyogb3B0aW1pemVkIFZDTyAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi9cXG4rXFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MjkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xcbitcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDcpIHwgQklUKDYpKSkgXFx1MDAzZVxcdTAwM2UgNjtcXG4rXFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgMTIpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgXFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xcbitcXHR0bXAgPSAodmFsXzEgXFx1MDAyNiAoQklUKDUpIHwgQklUKDQpKSkgXFx1MDAzZVxcdTAwM2UgNDtcXG4rXFx0cmV0IHw9IHRtcDtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xcbitcXHR0bXAgPSAodmFsXzMgXFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XFxuK1xcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDEyKTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJiLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDNhLCAweDEwMDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTEsIDB4MDA3Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRjZCwgMHgwMDAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIFNlcmRlcyBMRE8gKi9cXG4rXFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0IFxcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcXG4rXFx0dG1wID0gKHZhbF8yIFxcdTAwMjYgKEJJVCg0KSB8IEJJVCgzKSB8IEJJVCgyKSkpIFxcdTAwM2VcXHUwMDNlIDI7XFxuK1xcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDQpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcXG4rXFx0dG1wID0gKHZhbF8yIFxcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSB8IEJJVCg1KSkpIFxcdTAwM2VcXHUwMDNlIDU7XFxuK1xcdHJldCB8PSAodG1wIFxcdTAwM2NcXHUwMDNjIDgpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBvcHRpbWl6ZWQgU2VyZGVzIFJYICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIwLCAweDA4MDQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTcpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0LyogcmVzdGFydCBjYWxpYnJhdGlvbiAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcXHUwMDNlIDggKi9cXG4rXFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9SRVNWMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCBcXHUwMDI2PSB+WVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLO1xcbitcXHRyZXQgfD0gWVQ4ODI0X1NEU19UWF9QUkVfUEFERElORztcXG4rXFx0cmV0IHw9IFlUODgyNF9TRFNfRU5fRklMTF9QUkU7XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCByZXQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiByZXNldCBzZXJkZXMgKi9cXG4rXFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxcbitcXHRcXHRcXHQgICBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIHBvbGwgd2hpbGUgc3RpbGwgaG9sZGluZyB0aGUgbG9jazsgX19waHlfcmVhZCB0YWtlcyBubyBsb2NrICovXFxuK1xcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCxcXG4rXFx0XFx0XFx0XFx0KHZhbCBcXHUwMDNjIDApIHx8ICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksIDUwMDAwLCA2MDAwMDAsXFxuK1xcdFxcdFxcdFxcdHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRpZiAodmFsIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gdmFsO1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdFxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFx0aW50IHIgPSAwO1xcbitcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MSwgMHgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdC8qIHBvd2VyIGRvd24gKi9cXG4rXFx0cmV0ID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGUsIDB4Y2JhKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhhMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAwMywgMHgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3YywgMHg2MDY4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM4OCwgMHhhMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmZhLCAweDgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRlMiwgMHgxNDkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMi41RyB0ZW1wYXRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MSwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdC8qIDEwMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGY4LCAweGIzZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJjLCAweDUwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzIyLCAweDY0NDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAwIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZlLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZmLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcxLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzBiLCAweGFhMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NzFmLCAweDM2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdC8qIDEwIHRlbXBhdGUgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZiLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0LyogMTAgdGVtcGF0ZSBNQVUqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjgsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiBFTUMgQ1MsIEluY29uc2lzdGVudCB3aXRoIGV4dGVybmFsIHBoeSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhjOCwgMHhmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YmUsIDB4NjQwNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHQvKiBFTUMgUkUqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmU7XFxuK1xcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcdC8qIHJlc2V0ICovXFxuK1xcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXFxuK1xcdFxcdFxcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcXG4rXFx0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwgISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XFxuK1xcbitcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfcmVzdG9yZTpcXG4rXFx0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0dXJuIHJldDtcXG4rXFxuK2Vycl9yZXN0b3JlX25vcm1hbDpcXG4rXFx0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSByO1xcbitcXHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSByO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldik7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdFxcdGdvdG8gZXJyO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfZXh0ZXJuX2NvbmZpZ19zZHNfaW5pdF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnI7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFx0fVxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTtcXG4gXFxuLWVycl9yZXN0b3JlX3BhZ2U6XFxuLVxcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK1xcdHBoeWRldl9kYmcocGh5ZGV2LCBcXFwiJXMgZG9uZSwgcGh5IGFkZHI6ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4rXFx0XFx0ICAgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIpO1xcbitcXHRyZXR1cm4gcmV0O1xcbitlcnI6XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuQEAgLTMxMDQsNiArNDI0Miw0MTggQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XFxuIH1cXG4gXFxuKy8qKlxcbisgKiB5dDg4MjRfZ2V0X2ZlYXR1cmVzIC0gcmVhZCBtbWQgcmVnaXN0ZXIgdG8gZ2V0IDIuNUcgY2FwYWJpbGl0eVxcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFx0cmV0ID0geXQ4ODIxX2dldF9mZWF0dXJlcyhwaHlkZXYpO1xcbitcXG4rZXJyOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9hbmVnX2RvbmUoKSAgLSBjaGVjayBuZWdvdGlhdGlvbiBzdGF0ZS5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2FuZWdfZG9uZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgbGluayA9IDA7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0bGluayA9ICEhKHJldCBcXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcXG4rXFxuK1xcdHBoeWRldl9kYmcocGh5ZGV2LCBcXFwiJXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXFxcXG5cXFwiLCBfX2Z1bmNfXyxcXG4rXFx0XFx0ICAgcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xcbitcXHRyZXR1cm4gbGluaztcXG4rZXJyOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZCgpIC0gIGRldGVybWluZXMgdGhlIHNwZWVkIGFuZCBkdXBsZXggb2Ygb25lIHBhZ2VcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgbGluayA9IDA7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXHRpbnQgdmFsID0gMDtcXG4rXFxuK1xcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IGdlbnBoeV9yZWFkX3N0YXR1cyhwaHlkZXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcXG4rXFx0XFx0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX2xwYShwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHR2YWwgPSByZXQ7XFxuK1xcbitcXHRsaW5rID0gdmFsIFxcdTAwMjYgWVRQSFlfU1NSX0xJTks7XFxuK1xcdGlmIChsaW5rKVxcbitcXHRcXHR5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7XFxuK1xcbitcXHRpZiAobGluaykge1xcbitcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VsaW5rID09IDApXFxuK1xcdFxcdFxcdHBoeWRldl9kYmcocGh5ZGV2LCBcXFwiJXMsIHBoeSBhZGRyOiAlZCwgbGluayB1cFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgX19mdW5jX18sIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VsaW5rID0gMTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlbGluayA9PSAxKVxcbitcXHRcXHRcXHRwaHlkZXZfZGJnKHBoeWRldiwgXFxcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmsgZG93blxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgX19mdW5jX18sIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VsaW5rID0gMDtcXG4rXFx0fVxcbitcXHRwaHlfcmVzb2x2ZV9hbmVnX3BhdXNlKHBoeWRldik7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzKCkgLSAgZGV0ZXJtaW5lcyB0aGUgbmVnb3RpYXRlZCBzcGVlZCBhbmQgZHVwbGV4XFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJldCA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYpO1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKCk6IHV0cCBwb3dlciBvbi5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOIHwgQk1DUl9JU09MQVRFLCAweDApO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9kb3duKCk6IHV0cCBwb3dlciBkb3duLlxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCBCTUNSX1BET1dOKTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9wb3dlcl9vbigpICAtIHNldCB1dHAgcG93ZXIgb24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFx0aW50IHI7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdC8qIHV0cCBwb3dlciBvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBzZHMgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHV0cCBwb3dlciBvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbitcXG4rcmV0cnk6XFxuK1xcdC8qXFxuK1xcdCAqIElmIHRoZSBQSFkgdXAgb3BlcmF0aW9uIHN1Y2NlZWRzIGJ1dCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb25cXG4rXFx0ICogZmFpbHMsIHJldmVydCB0byB0aGUgZGVmYXVsdCBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHIgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IHIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXQgPSByO1xcbitcXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVzdW1lKCkgLSByZXN1bWUgdGhlIGhhcmR3YXJlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlc2hhcmVkX2xvY2spO1xcbitcXHRyZXQgPSB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRpbnQgcmV0O1xcbitcXHRpbnQgcjtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0XFx0LyogdXRwIHBvd2VyIGRvd24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcbitcXHRcXHQvKiBzZHMgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHV0cCBwb3dlciBkb3duICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFxuK1xcdFxcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byByZXRyeTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rXFxuK3JldHJ5OlxcbitcXHQvKlxcbitcXHQgKiBJZiB0aGUgUEhZIGRvd24gb3BlcmF0aW9uIHN1Y2NlZWRzIGJ1dCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb25cXG4rXFx0ICogZmFpbHMsIHJldmVydCB0byB0aGUgZGVmYXVsdCBzdGF0ZS5cXG4rXFx0ICovXFxuK1xcdHIgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0ID0gcjtcXG4rXFx0cmV0ID0geXQ4ODI0X3Jlc3RvcmVfd29ya2luZ19zdGF0dXMocGh5ZGV2LCByZXQpO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3N1c3BlbmQoKSAtIHN1c3BlbmQgdGhlIGhhcmR3YXJlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3N1c3BlbmQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0geXQ4ODI0X3Bvd2VyX2Rvd24ocGh5ZGV2KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19hbmVnKCkgLSBjb25maWcgbmVnb3RpYXRpb25cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcXG4rXFx0aW50IHBoeV9jdHJsID0gMDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycjtcXG4rXFxuK1xcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXFxuK1xcdFxcdFxcdCAgICAgIHBoeWRldi1cXHUwMDNlYWR2ZXJ0aXNpbmcpKVxcbitcXHRcXHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xcbitcXG4rXFx0cmV0ID0gcGh5X21vZGlmeV9tbWRfY2hhbmdlZChwaHlkZXYsIE1ESU9fTU1EX0FOLCBNRElPX0FOXzEwR0JUX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUcsIHBoeV9jdHJsKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXG4rXFx0cmV0ID0gX19nZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2LCByZXQpO1xcbitcXG4rZXJyOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZXNoYXJlZF9sb2NrKTtcXG4rXFx0cmV0dXJuIHJldDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKCkgIC0gaW5pdCBwaHkgcGFja2FnZSBmb3IgcGh5ODgyNC5cXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xcbitcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTtcXG4rXFx0aW50IHJlcztcXG4rXFxuK1xcdGlmICghcHJpdiB8fCAhbnApIHtcXG4rXFx0XFx0cGh5ZGV2X2VycihwaHlkZXYsIFxcXCIlczogbWlzc2luZyBzaGFyZWQgcHJpdiBvciBEVCBub2RlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgICBfX2Z1bmNfXyk7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcdC8qIEluaXRpYWxpc2Ugc2hhcmVkIGxvY2sgZm9yIFlUODgyNCAqL1xcbitcXHRtdXRleF9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VzaGFyZWRfbG9jayk7XFxuK1xcdHJlcyA9IG9mX2dldF9waHlfbW9kZShucCwgXFx1MDAyNnByaXYtXFx1MDAzZWludGVyZmFjZV9tb2RlKTtcXG4rXFx0aWYgKHJlcyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcXFwiJXMsIHBoeS1tb2RlIG1pc3NpbmcgaW4gRFRTLlxcXFxuXFxcIiwgX19mdW5jX18pO1xcbitcXHRcXHRwcml2LVxcdTAwM2VpbnRlcmZhY2VfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcHJvYmUoKSAtIHBoeTg4MjQgcHJvYmUuXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnNoYXJlZF9wcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MTEpLFxcbkBAIC0zMTkwLDEzICs0NzQwLDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcXG4gXFx0XFx0LnN1c3BlbmRcXHRcXHQ9IHl0ODgyMV9zdXNwZW5kLFxcbiBcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSB5dDg4MjFfcmVzdW1lLFxcbiBcXHR9LFxcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcXG4rXFx0XFx0Lm5hbWUgPSBcXFwiWVQ4ODI0IFF1YWQgUG9ydHMgMi41R2JwcyBFdGhlcm5ldFxcXCIsXFxuK1xcdFxcdC5nZXRfZmVhdHVyZXMgPSB5dDg4MjRfZ2V0X2ZlYXR1cmVzLFxcbitcXHRcXHQucmVhZF9wYWdlID0geXQ4ODI0X3JlYWRfcGFnZSxcXG4rXFx0XFx0LndyaXRlX3BhZ2UgPSB5dDg4MjRfd3JpdGVfcGFnZSxcXG4rXFx0XFx0LnByb2JlID0geXQ4ODI0X3Byb2JlLFxcbitcXHRcXHQuY29uZmlnX2FuZWcgPSB5dDg4MjRfY29uZmlnX2FuZWcsXFxuK1xcdFxcdC5hbmVnX2RvbmUgPSB5dDg4MjRfYW5lZ19kb25lLFxcbitcXHRcXHQuY29uZmlnX2luaXQgPSB5dDg4MjRfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5yZWFkX3N0YXR1cyA9IHl0ODgyNF9yZWFkX3N0YXR1cyxcXG4rXFx0XFx0LnNvZnRfcmVzZXQgPSB5dDg4MjRfc29mdF9yZXNldCxcXG4rXFx0XFx0LnN1c3BlbmQgPSB5dDg4MjRfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZSA9IHl0ODgyNF9yZXN1bWUsXFxuK1xcdH0sXFxuIH07XFxuIFxcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xcbiBcXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXFxcIik7XFxuIE1PRFVMRV9BVVRIT1IoXFxcIlBldGVyIEdlaXNcXFwiKTtcXG4gTU9EVUxFX0FVVEhPUihcXFwiRnJhbmtcXFwiKTtcXG4rTU9EVUxFX0FVVEhPUihcXFwiS3lsZVxcXCIpO1xcbiBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcXG5AQCAtMzIwNiw2ICs0NzcyLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XFxuIFxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXFxuIFxcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LFxcbiBcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSB9LFxcbitcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxcbiBcXHR7IC8qIHNlbnRpbmVsICovIH1cXG4gfTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMgYi9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXFxuaW5kZXggODcwOTIwMzExZjlhMC4uZjhlMDNkM2FmYTQ1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xcbkBAIC0xNDA4LDYgKzE0MDgsMzAgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKTtcXG4gXFxuKy8qKlxcbisgKiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIC0gY29uZmlndXJlIHRlbXBsYXRlIHRlc3Rtb2RlIHJlZ2lzdGVyc1xcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4rICogQHRlc3RfbW9kZTogdGVzdG1vZGUgaW5jbHVkZXMgTm9ybWFsIHRvIFRlc3QgbW9kZSA3XFxuKyAqXFxuKyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcXG4rICpcXG4rICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIChlLmcuIHJlZ2lzdGVyXFxuKyAqIHJlYWQvd3JpdGUgZXJyb3IpLlxcbisgKi9cXG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcXG4re1xcbitcXHRpbnQgY3RybDtcXG4rXFxuK1xcdGlmICh0ZXN0X21vZGUgXFx1MDAzYyBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwgfHxcXG4rXFx0ICAgIHRlc3RfbW9kZSBcXHUwMDNlIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzcpXFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFxuK1xcdGN0cmwgPSBGSUVMRF9QUkVQKE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIHRlc3RfbW9kZSk7XFxuK1xcdHJldHVybiBwaHlfbW9kaWZ5X21tZChwaHlkZXYsIE1ESU9fTU1EX1BNQVBNRCwgTURJT19QTUFfMTBHQlRfVEVTVE1PREUsXFxuK1xcdFxcdFxcdCAgICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIGN0cmwpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUpO1xcbitcXG4gLyoqXFxuICAqIGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnIC0gZ2V0IFBMQ0EgY29uZmlndXJhdGlvbiBmcm9tIHN0YW5kYXJkIHJlZ2lzdGVyc1xcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmhcXG5pbmRleCAzZDhhZmU2YjdmMWM1Li5mYjgyN2NjM2M5OGY0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oXFxuQEAgLTIzNTcsNiArMjM1Nyw3IEBAIGludCBnZW5waHlfYzQ1X2xvb3BiYWNrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlLCBpbnQgc3BlZWQpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbWFfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG4gaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKTtcXG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XFxuIGludCBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IHBoeV9wbGNhX2NmZyAqcGxjYV9jZmcpO1xcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG5pbmRleCAwNmY0YmMzYzIwYzcxLi4zNTNjYTEzYzY0ZmNhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oXFxuQEAgLTYzLDYgKzYzLDcgQEBcXG4gLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCVF9TV0FQUE9MXFx0MTMwXFx0LyogMTBHQkFTRS1UIHBhaXIgc3dhcCBcXHUwMDI2IHBvbGFyaXR5ICovXFxuICNkZWZpbmUgTURJT19QTUFfMTBHQlRfVFhQV1JcXHQxMzFcXHQvKiAxMEdCQVNFLVQgVFggcG93ZXIgY29udHJvbCAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFIDEzMiAvKiBUZXN0IG1vZGUgY29udHJvbCAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NOUlxcdDEzM1xcdC8qIDEwR0JBU0UtVCBTTlIgbWFyZ2luLCBsYW5lIEEuXFxuIFxcdFxcdFxcdFxcdFxcdCAqIExhbmVzIEItRCBhcmUgbnVtYmVyZWQgMTM0LTEzNi4gKi9cXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0NTUlxcdDE0N1xcdC8qIDEwR0JBU0UtUiBmYXN0IHJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sICovXFxuQEAgLTMyMCw2ICszMjEsMTcgQEBcXG4gLyogUE1BIDEwR0JBU0UtUiBGYXN0IFJldHJhaW4gc3RhdHVzIGFuZCBjb250cm9sIHJlZ2lzdGVyLiAqL1xcbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JSX0ZTUlRfRU5BQkxFXFx0MHgwMDAxXFx0LyogRmFzdCByZXRyYWluIGVuYWJsZSAqL1xcbiBcXG4rLyogUE1BIDEwR0JBU0UtVCBUZW1wbGF0ZSBUZXN0IE1vZGUgUmVnaXN0ZXIqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0sgR0VOTUFTSygxNSwgMTMpIC8qIFRlbXBsYXRlIHRlc3QgbW9kZSAqL1xcbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCAweDAgLyogVGVtcGxhdGUgTm9ybWFsICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSAweDEgLyogVGVtcGxhdGUgVGVzdE1vZGUxICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMiAweDIgLyogVGVtcGxhdGUgVGVzdE1vZGUyICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMyAweDMgLyogVGVtcGxhdGUgVGVzdE1vZGUzICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNCAweDQgLyogVGVtcGxhdGUgVGVzdE1vZGU0ICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNSAweDUgLyogVGVtcGxhdGUgVGVzdE1vZGU1ICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNiAweDYgLyogVGVtcGxhdGUgVGVzdE1vZGU2ICovXFxuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNyAweDcgLyogVGVtcGxhdGUgVGVzdE1vZGU3ICovXFxuK1xcbiAvKiBQQ1MgMTBHQkFTRS1SLy1UIHN0YXR1cyByZWdpc3RlciAxLiAqL1xcbiAjZGVmaW5lIE1ESU9fUENTXzEwR0JSVF9TVEFUMV9CTEtMS1xcdDB4MDAwMVxcdC8qIEJsb2NrIGxvY2sgYXR0YWluZWQgKi9cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDEwOjU5OjUxLjIyNTk1MjgyM1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTE3ODc2NDIwNjc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41RyBFdGhlcm5ldCBQSFkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGFuZCBhZGRzIGFuIGFzc29jaWF0ZWQgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy4gVGhlIG1vZGlmaWVkIGNvZGUgdGFyZ2V0cyBhIHNwZWNpZmljIHBoeXNpY2FsIEV0aGVybmV0IFBIWSB0cmFuc2NlaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBzcGVjaWZpYyBEZXZpY2UgVHJlZSBkZXNjcmlwdGlvbiAoJ2V0aGVybmV0LXBoeS1wYWNrYWdlJyksIHdoaWNoIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9RRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGUgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaXMgc29sZWx5IGNhbGxlZCBieSB0aGUgWVQ4ODI0IGRyaXZlciwgYW5kIHByb2JlIGltbWVkaWF0ZWx5IGZhaWxzIHdpdGhvdXQgdGhlIE9GIG5vZGUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhZTMxZWExYTZiNTJjODY4YjljN2E3NDk2MTI4NjFmMGMxNzJiZTlhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMTA6NTk6NDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21vdG9yY29tbSx5dDg4MjQueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbW90b3Jjb21tLHl0ODgyNC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOTNlOWY3NjU0MDRhM1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWxcbkBAIC0wLDAgKzEsNTkgQEBcbisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbislWUFNTCAxLjJcbistLS1cbiskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC9tb3RvcmNvbW0seXQ4ODI0LnlhbWwjXG4rJHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4rXG4rdGl0bGU6IE1vdG9yQ29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZXG4rXG4rbWFpbnRhaW5lcnM6XG4rICAtIEt5bGUgU3dpdGNoIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4rXG4rZGVzY3JpcHRpb246XG4rICBNb3RvcmNvbW0gWVQ4ODI0IEV0aGVybmV0IFBIWSBpcyBhIFBIWSBwYWNrYWdlIG9mIDQgUEhZcy5cbitcbiskcmVmOiBldGhlcm5ldC1waHktcGFja2FnZS55YW1sI1xuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0gbW90b3Jjb21tLHl0ODgyNC1wYWNrYWdlXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gcGh5LW1vZGVcbisgIC0gcmVnXG4rXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuK1xuK2V4YW1wbGVzOlxuKyAgLSB8XG4rICAgIG1kaW8ge1xuKyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuK1xuKyAgICAgICAgZXRoZXJuZXQtcGh5LXBhY2thZ2VAMCB7XG4rICAgICAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuKyAgICAgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbisgICAgICAgICAgICBjb21wYXRpYmxlID0gXCJtb3RvcmNvbW0seXQ4ODI0LXBhY2thZ2VcIjtcbisgICAgICAgICAgICByZWcgPSBcdTAwM2M5XHUwMDNlO1xuK1xuKyAgICAgICAgICAgIHBoeS1tb2RlID0gXCJpbnRlcm5hbFwiO1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA0IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNFx1MDAzZTtcbisgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA1IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNVx1MDAzZTtcbisgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA2IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjNlx1MDAzZTtcbisgICAgICAgICAgICB9O1xuK1xuKyAgICAgICAgICAgIGV0aGVybmV0LXBoeUA3IHtcbisgICAgICAgICAgICAgICAgcmVnID0gXHUwMDNjN1x1MDAzZTtcbisgICAgICAgICAgICB9O1xuKyAgICAgICAgfTtcbisgICAgfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5pbmRleCBkMzgzNTU5N2UzNzk1Li45OTZkNzVhZmVkNDQ2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L0tjb25maWdcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnXG5AQCAtMzYxLDkgKzM2MSwxMCBAQCBjb25maWcgTUlDUk9TRU1JX1BIWVxuIFxuIGNvbmZpZyBNT1RPUkNPTU1fUEhZXG4gXHR0cmlzdGF0ZSBcIk1vdG9yY29tbSBQSFlzXCJcbitcdHNlbGVjdCBQSFlfUEFDS0FHRVxuIFx0aGVscFxuIFx0ICBFbmFibGVzIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBuZXR3b3JrIFBIWXMuXG4tXHQgIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzLlxuK1x0ICBDdXJyZW50bHkgc3VwcG9ydHMgWVQ4NXh4IEdpZ2FiaXQgRXRoZXJuZXQgUEhZcyBhbmQgWVQ4ODI0IDQgKiAyLjVHIFBIWS5cbiBcbiBjb25maWcgTkFUSU9OQUxfUEhZXG4gXHR0cmlzdGF0ZSBcIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEhZc1wiXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCA5MGE0Zjg2ZjI3NThiLi5iNjA5NDhjOWNlODg0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xLDI0ICsxLDMxIEBAXG4gLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjArXG4gLypcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXG4rICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMS84ODI0IFBIWSBkcml2ZXIuXG4gICpcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXHUwMDNjcGd3aXBlb3V0QGdtYWlsLmNvbVx1MDAzZVxuICAqIEF1dGhvcjogRnJhbmsgXHUwMDNjRnJhbmsuU2FlQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4rICogQXV0aG9yOiBLeWxlIFx1MDAzY2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tXHUwMDNlXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuIFxuKyNpbmNsdWRlIFwicGh5bGliLmhcIlxuK1xuICNkZWZpbmUgUEhZX0lEX1lUODUxMVx0XHQweDAwMDAwMTBhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXHRcdDB4MDAwMDAxMWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcdFx0MHg0ZjUxZTkyOFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVx0XHQweDRmNTFlOTFiXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1x0XHQweDRmNTFlOTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXHRcdDB4NGY1MWVhMTlcbisjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcdFx0MHg0ZjUxZThiOFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xuICAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQEAgLTMwLDYgKzM3LDE4IEBAXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAqL1xuIFxuKy8qIFlUODgyNCBSZWdpc3RlciBPdmVydmlld1xuKyAqIFVUUCBSZWdpc3RlciBzcGFjZSB8IFVTWEdNSUkgUmVnaXN0ZXIgc3BhY2VcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICogfCBVVFAgTUlJXHRcdHwgVVNYR01JSSBNSUlcdFx0fFxuKyAqIHwgVVRQIE1NRFx0XHR8XHRcdFx0fFxuKyAqIHwgVVRQIEV4dGVuZGVkXHR8IFVTWEdNSUkgRXh0ZW5kZWRcdHxcbisgKiB8IFVUUCBUb3AgRXh0ZW5kZWRcdHwgVVNYR01JSSBUb3AgRXh0ZW5kZWRcdHxcbisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4rICogfCAgIENvbW1vbiBUb3AgRXh0ZW5kZWRcdFx0XHR8XG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqL1xuK1xuIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovXG4gXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xuQEAgLTM4MSw2ICs0MDAsMTMgQEBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUlcdDBcbiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfRk9SQ0VfQlgyNTAwXHRcdDFcbiBcbisjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0tcdFx0XHRCSVQoMClcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0VcdFx0KDB4MSlcbisjZGVmaW5lIFlUODgyNF9SU1NSX1VUUF9TUEFDRVx0XHRcdCgweDApXG4rI2RlZmluZSBZVDg4MjRfU0RTX0NGR19NSU5fUFJFX01BU0tcdFx0R0VOTUFTSygzLCAwKVxuKyNkZWZpbmUgWVQ4ODI0X1NEU19FTl9GSUxMX1BSRVx0XHRcdEJJVCgxMylcbisjZGVmaW5lIFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkdcdFx0KDB4NylcbitcbiBzdHJ1Y3QgeXQ4NTIxX3ByaXYge1xuIFx0LyogY29tYm9fYWR2ZXJ0aXNpbmcgaXMgdXNlZCBmb3IgY2FzZSBvZiBZVDg1MjEgaW4gY29tYm8gbW9kZSxcbiBcdCAqIHRoaXMgbWVhbnMgdGhhdCB5dDg1MjEgbWF5IHdvcmsgaW4gdXRwIG9yIGZpYmVyIG1vZGUgd2hpY2ggZGVwZW5kc1xuQEAgLTM5OSw2ICs0MjUsMTIgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdHU4IHJlZ19wYWdlO1xuIH07XG4gXG4rc3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiB7XG4rXHRwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlX21vZGU7XG4rXHQvKiBzaGFyZWRfbG9jayB1c2VkIHRvIFVUUHMgb3BlcmF0aW9uIGlzb2xhdGlvbiBkdXJpbmcgc3dhcCByZWcgc3BhY2UgKi9cbitcdHN0cnVjdCBtdXRleCBzaGFyZWRfbG9jaztcbit9O1xuK1xuIC8qKlxuICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTQzNyw2ICs0NjksNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qKlxuKyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuKyAqXG4rICogUmV0dXJuczogdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4re1xuK1x0aW50IHJldDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIF9fcGh5X3BhY2thZ2VfcmVhZChwaHlkZXYsIDAsIFlUUEhZX1BBR0VfREFUQSk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHdyaXRlIGEgUEhZJ3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byB3cml0ZVxuKyAqIEB2YWw6IHJlZ2lzdGVyIHZhbCB0byB3cml0ZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJvciBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXG4rXHRcdFx0ICAgICAgIHUxNiB2YWwpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uYnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rXHRyZXQgPSBfX3BoeV9wYWNrYWdlX3dyaXRlKHBoeWRldiwgMCwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIF9fcGh5X3BhY2thZ2Vfd3JpdGUocGh5ZGV2LCAwLCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7XG4rfVxuK1xuKy8qKlxuKyAqIHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2soKSAtIHdyaXRlIHBhZ2UgZm9yIFlUODgyNFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHBhZ2U6IHJlZyBwYWdlKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKS5cbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcdHJldCBcdTAwMjY9IH5ZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuK1x0cmV0IHw9IChwYWdlIFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCk7XG4rXG4rZXJyOlxuK1x0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4gLyoqXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC02MjIsMTUgKzcxOCwxMDU3IEBAIHN0YXRpYyBpbnQgeXRwaHlfc2V0X3dvbChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpXG4gXHRcdG1hc2sgPSBZVFBIWV9XQ1JfRU5BQkxFIHwgWVRQSFlfV0NSX0lOVFJfU0VMO1xuIFx0XHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVRQSFlfV09MX0NPTkZJR19SRUcsIG1hc2ssIDApO1xuIFxuLVx0XHQvKiBEaXNhYmxlIFdPTCBpbnRlcnJ1cHQgKi9cbi1cdFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsXG4tXHRcdFx0XHQgICBZVFBIWV9JRVJfV09MLCAwKTtcbitcdFx0LyogRGlzYWJsZSBXT0wgaW50ZXJydXB0ICovXG4rXHRcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLFxuK1x0XHRcdFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0fVxuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIFBIWTg4MjQgcmVnIHBhZ2VcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9VU1hHTUlJX1NQQUNFL1xuKyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcbitcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIG9sZF9wYWdlO1xuK1xuK1x0cmV0dXJuIG9sZF9wYWdlIFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuK307XG4rXG4rLyoqXG4rICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcGFnZTogUmVnIHBhZ2UoWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHR1MTYgZGF0YTtcbitcbitcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIG9sZF9wYWdlO1xuK1x0ZGF0YSA9IG9sZF9wYWdlIFx1MDAyNiAofllUODgyNF9SU1NSX1NQQUNFX01BU0spO1xuK1x0ZGF0YSB8PSBwYWdlO1xuK1xuK1x0cmV0dXJuIHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpO1xuK307XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZCgpIC0gY29uZmlnIFlUODgyNCB0byBpbnZhbGlkIHRlc3QgbW9kZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXG4rXHRcdChwaHlkZXYsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQoKSAtIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Nkc19pc29sYXRlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBlbmFibGUgc2RzIGlzb2xhdGUgKi9cbitcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX0lTT0xBVEUsIEJNQ1JfSVNPTEFURSk7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdC8qIHJlc3RvcmUgcGFnZSwgcmVsZWFzZSB0aGUgbG9jayAqL1xuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9zb2Z0cmVzZXRfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgVVRQIHNvZnRyZXNldC5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3NvZnRyZXNldF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1x0aW50IHZhbDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCwgQk1DUl9SRVNFVCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0Lyogd2FpdCB1bnRpbCBzb2Z0cmVzZXQgZG9uZS4gKi9cbitcdHJldHVybiBwaHlfcmVhZF9wb2xsX3RpbWVvdXQocGh5ZGV2LCBNSUlfQk1DUiwgdmFsLCAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHQgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoKSAtIGNvbmZpZyBZVDg4MjQgdG8gbm9ybWFsIHRlc3QgbW9kZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX25vcm1hbF90ZXN0X21vZGVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbitcdFx0XHRcdFx0ICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKCkgLSBkaXNhYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZVxuKyAqIGFuZCBzZHMgc29mdHJlc2V0LlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IG9sZF9wYWdlID0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xuK1x0aW50IHZhbCA9IDA7XG4rXHRpbnQgcmV0ID0gLTE7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBzZHMgc29mdHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGUgKi9cbitcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1JFU0VUIHwgQk1DUl9JU09MQVRFLFxuK1x0XHRcdCAgIEJNQ1JfUkVTRVQgXHUwMDI2IH5CTUNSX0lTT0xBVEUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrICovXG4rXHRyZXQgPSByZWFkX3BvbGxfdGltZW91dChfX3BoeV9yZWFkLCB2YWwsXG4rXHRcdFx0XHQodmFsIFx1MDAzYyAwKSB8fCAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksIDUwMDAwLCA2MDAwMDAsXG4rXHRcdFx0XHR0cnVlLCBwaHlkZXYsIE1JSV9CTUNSKTtcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldCA9IHZhbDtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0LyogcmVzdG9yZSBwYWdlLCByZWxlYXNlIHRoZSBsb2NrICovXG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cygpIC0gY2FsbGVkIHRvIGRvIHN0b3JlIHdvcmtpbmcgc3RhdHVzXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmV0OiBvcGVyYXRpb24ncyByZXR1cm4gY29kZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmV0KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHI7XG4rXG4rXHQvKiBjb25maWd1cmUgbm9ybWFsIHRlc3QgbW9kZSAqL1xuK1x0ciA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSAhPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHIgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0XHRyZXQgPSByO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBkbyBQSFkgc29mdHdhcmUgcmVzZXRcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9pbnZhbGlkX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9hbmRfc29mdHJlc2V0X3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldHVybiByZXQ7XG4rcmV0cnk6XG4rXHRyZXQgPSB5dDg4MjRfcmVzdG9yZV93b3JraW5nX3N0YXR1cyhwaHlkZXYsIHJldCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfZXh0ZXJuX2NvbmZpZ191dHBfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGV4dGVybmFsIHBoeTg4MjQgdXRwIGluaXRcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0ID0gMDtcbitcdGludCB2YWwgPSAwO1xuK1x0aW50IHI7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHQvKiBwb3dlciBkb3duICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIHBsbCBjYWxpYnJhdGlvbiAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMjBlLCAweDBjYmEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweDBhMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemF0aW9uIHV0cCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBlbmFibGUgbmliYmxlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDAzLCAweDAwMDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIGlkbGUgZXJyIGRldGVjdCBlbmFibGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM1OSwgMHgyMTQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMDBjLCAweGMxYTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIDIuNUcgdGVtcGxhdGUgdG9uZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIG9wdGltaXplZCAyLjVHIHRlbXBsYXRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIG9wdGltaXplZCAxMDAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzNDAsIDB4MzAxZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmUsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NzEsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNzFmLCAweDAwMzYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdC8qIDEwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NmIsIDB4MTgxOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgMTBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDQ2NywgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDY4LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0Lyogb3B0aW1pemUgdXRwIDEwMDBNIHBlcmZvcm1hbmNlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgRU1DIENTICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwMGM4LCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MDM3YSwgMHg0MGZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgwNDgyLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcbitcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0LyogcmVzZXQgKi9cbitcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4rXHRcdFx0IEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0cmV0ID0gcGh5X3JlYWRfcG9sbF90aW1lb3V0KHBoeWRldiwgTUlJX0JNQ1IsIHZhbCwgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuK1x0XHRcdFx0ICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9ub3JtYWw7XG4rXG4rXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcbitcdFx0XHRcdFx0ICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1x0cmV0dXJuIDA7XG4rXG4rZXJyX3Jlc3RvcmU6XG4rXHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0cmV0dXJuIHJldDtcbitcbitlcnJfcmVzdG9yZV9ub3JtYWw6XG4rXHRyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXG4rXHRcdFx0XHRcdCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwpO1xuK1x0aWYgKHJldCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2IHIgXHUwMDNjIDApXG4rXHRcdHJldCA9IHI7XG4rXHRyID0gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOLCAwKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoKSAtIGNvbmZpZyBleHRlcm5hbCBwaHk4ODI0IHNkcyBpbml0XG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2UgPSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4rXHRpbnQgdmFsXzEsIHZhbF8yLCB2YWxfMywgdG1wO1xuK1x0aW50IHJldCA9IC0xO1xuK1x0aW50IHZhbDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVNYR01JSV9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIHJlYWQgZWZ1c2UgKi9cbitcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTEzZSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRlbHNlXG4rXHRcdHZhbF8xID0gcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMTNmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGVsc2VcbitcdFx0dmFsXzIgPSByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCAweGExNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0ZWxzZVxuK1x0XHR2YWxfMyA9IHJldDtcbitcbitcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiZSwgMHgwMDBkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5ZiwgMHg3ZGVkKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIGFuYWxvZyBDRFIgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIG9wdGltaXplZCBWQ08gKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xuK1x0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MjkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4rXHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNykgfCBCSVQoNikpKSBcdTAwM2VcdTAwM2UgNjtcbitcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MjksIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgXHUwMDI2PSB+KEJJVCgxKSB8IEJJVCgwKSk7XG4rXHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNSkgfCBCSVQoNCkpKSBcdTAwM2VcdTAwM2UgNDtcbitcdHJldCB8PSB0bXA7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbitcdHRtcCA9ICh2YWxfMyBcdTAwMjYgKEJJVCgxKSB8IEJJVCgwKSkpO1xuK1x0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYiwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzYSwgMHgxMDA2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYSwgMHhmMDcwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0Y2QsIDB4MDAwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBTZXJkZXMgTERPICovXG4rXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgXHUwMDI2PSB+KEJJVCg2KSB8IEJJVCg1KSB8IEJJVCg0KSk7XG4rXHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpKSBcdTAwM2VcdTAwM2UgMjtcbitcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA0KTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNSwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCBcdTAwMjY9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7XG4rXHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpKSBcdTAwM2VcdTAwM2UgNTtcbitcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA4KTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIG9wdGltaXplZCBTZXJkZXMgUlggKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4ZSwgMHg3ZDAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwZCwgMHgwNjA2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdC8qIFNlcmRlcyBtYW51YWwgY29uZmlnICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcdTAwM2UgOCAqL1xuK1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9SRVNWMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgXHUwMDI2PSB+WVQ4ODI0X1NEU19DRkdfTUlOX1BSRV9NQVNLO1xuK1x0cmV0IHw9IFlUODgyNF9TRFNfVFhfUFJFX1BBRERJTkc7XG4rXHRyZXQgfD0gWVQ4ODI0X1NEU19FTl9GSUxMX1BSRTtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX1JFU1YxLCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogcmVzZXQgc2VyZGVzICovXG4rXHRyZXQgPSBfX3BoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUsXG4rXHRcdFx0ICAgQk1DUl9SRVNFVCB8IEJNQ1JfQU5FTkFCTEUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogcG9sbCB3aGlsZSBzdGlsbCBob2xkaW5nIHRoZSBsb2NrOyBfX3BoeV9yZWFkIHRha2VzIG5vIGxvY2sgKi9cbitcdHJldCA9IHJlYWRfcG9sbF90aW1lb3V0KF9fcGh5X3JlYWQsIHZhbCxcbitcdFx0XHRcdCh2YWwgXHUwMDNjIDApIHx8ICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSwgNTAwMDAsIDYwMDAwMCxcbitcdFx0XHRcdHRydWUsIHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKHZhbCBcdTAwM2MgMClcbitcdFx0cmV0ID0gdmFsO1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHQvKiByZXN0b3JlIHBhZ2UsIHJlbGVhc2UgdGhlIGxvY2sgKi9cbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZCgpIC0gY29uZmlnIGludGVybmFsIHBoeTg4MjQgaW5pdFxuKyAqIEBwaHlkZXY6IHRhcmdldCBwaHlfZGV2aWNlIHN0cnVjdFxuKyAqXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCByZXQgPSAwO1xuK1x0aW50IHZhbCA9IDA7XG4rXHRpbnQgciA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgxLCAweDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdC8qIHBvd2VyIGRvd24gKi9cbitcdHJldCA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgQk1DUl9QRE9XTik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMDMsIDB4Myk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4M2QwLCAweDUyMTApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM3MiwgMHg1MDM4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4Mzg4LCAweGEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzNTksIDB4MjE0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJmYSwgMHg4Myk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGUyLCAweDE0OSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogMi41RyB0ZW1wYXRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0N2UsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDdmLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0ODEsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzQwLCAweDMwMWQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIDEwMDAgcGVyZm9ybWFuY2UgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhmOCwgMHhiM2ZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMmMsIDB4NTA5NCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDMyZSwgMHg1MzA4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMjIsIDB4NjQ0MCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDRkMiwgMHg1MjIwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiAxMDAgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZlLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2ZiwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NzAsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDcxLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIDEwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NzFmLCAweDM2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiAxMCB0ZW1wYXRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NmIsIDB4MTgxOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdC8qIDEwIHRlbXBhdGUgTUFVKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2NiwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4NDY4LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ2OSwgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHQvKiBFTUMgQ1MsIEluY29uc2lzdGVudCB3aXRoIGV4dGVybmFsIHBoeSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YzgsIDB4ZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhiZSwgMHg2NDA2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHgzN2EsIDB4NDBmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0LyogRU1DIFJFKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyZDYsIDB4MWYxZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEyMTgsIDB4NmUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YywgMHg0MWExKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmU7XG4rXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSk7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbitcdC8qIHJlc2V0ICovXG4rXHRyZXQgPSBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQgfCBCTUNSX0FORU5BQkxFLFxuK1x0XHRcdCBCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbitcdHJldCA9IHBoeV9yZWFkX3BvbGxfdGltZW91dChwaHlkZXYsIE1JSV9CTUNSLCB2YWwsICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdCAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfbm9ybWFsO1xuK1xuK1x0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXG4rXHRcdFx0XHRcdCAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX25vcm1hbDtcbitcbitcdHJldHVybiAwO1xuK1xuK2Vycl9yZXN0b3JlOlxuK1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldHVybiByZXQ7XG4rXG4rZXJyX3Jlc3RvcmVfbm9ybWFsOlxuK1x0ciA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LFxuK1x0XHRcdFx0XHQgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcbitcdGlmIChyZXQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiByIFx1MDAzYyAwKVxuK1x0XHRyZXQgPSByO1xuK1x0ciA9IHBoeV9tb2RpZnkocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9QRE9XTiwgMCk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfaW5pdCgpIC0gcGh5IGluaXRpYWxpemF0aW9pblxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRpZiAocHJpdi1cdTAwM2VpbnRlcmZhY2VfbW9kZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0cmV0ID0geXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldik7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRcdGdvdG8gZXJyO1xuK1x0fSBlbHNlIHtcbitcdFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfc2RzX2luaXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbitcdFx0cmV0ID0geXQ4ODI0X2V4dGVybl9jb25maWdfdXRwX2luaXRfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycjtcbiBcdH1cbitcdG11dGV4X3VubG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4gXG4tZXJyX3Jlc3RvcmVfcGFnZTpcbi1cdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCIlcyBkb25lLCBwaHkgYWRkcjogJWRcXG5cIiwgX19mdW5jX18sXG4rXHRcdCAgIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIpO1xuK1x0cmV0dXJuIHJldDtcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBzdGF0aWMgaW50IHl0ODUzMV9zZXRfd29sKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG5AQCAtMzEwNCw2ICs0MjQyLDQxOCBAQCBzdGF0aWMgaW50IHl0ODgyMV9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XG4gfVxuIFxuKy8qKlxuKyAqIHl0ODgyNF9nZXRfZmVhdHVyZXMgLSByZWFkIG1tZCByZWdpc3RlciB0byBnZXQgMi41RyBjYXBhYmlsaXR5XG4rICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcdHJldCA9IHl0ODgyMV9nZXRfZmVhdHVyZXMocGh5ZGV2KTtcbitcbitlcnI6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfYW5lZ19kb25lKCkgIC0gY2hlY2sgbmVnb3RpYXRpb24gc3RhdGUuXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IGxpbmsgc3RhdHVzIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCBsaW5rID0gMDtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXG4rXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXHRsaW5rID0gISEocmV0IFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XG4rXG4rXHRwaHlkZXZfZGJnKHBoeWRldiwgXCIlcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcXG5cIiwgX19mdW5jX18sXG4rXHRcdCAgIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xuK1x0cmV0dXJuIGxpbms7XG4rZXJyOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdGludCBsaW5rID0gMDtcbitcdGludCByZXQgPSAwO1xuK1x0aW50IHZhbCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBnZW5waHlfcmVhZF9zdGF0dXMocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWF1dG9uZWdfY29tcGxldGUpIHtcbitcdFx0cmV0ID0gZ2VucGh5X2M0NV9yZWFkX2xwYShwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRyZXQgPSBwaHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHZhbCA9IHJldDtcbitcbitcdGxpbmsgPSB2YWwgXHUwMDI2IFlUUEhZX1NTUl9MSU5LO1xuK1x0aWYgKGxpbmspXG4rXHRcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcbitcbitcdGlmIChsaW5rKSB7XG4rXHRcdGlmIChwaHlkZXYtXHUwMDNlbGluayA9PSAwKVxuK1x0XHRcdHBoeWRldl9kYmcocGh5ZGV2LCBcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmsgdXBcXG5cIixcbitcdFx0XHRcdCAgIF9fZnVuY19fLCBwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbitcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAxO1xuK1x0fSBlbHNlIHtcbitcdFx0aWYgKHBoeWRldi1cdTAwM2VsaW5rID09IDEpXG4rXHRcdFx0cGh5ZGV2X2RiZyhwaHlkZXYsIFwiJXMsIHBoeSBhZGRyOiAlZCwgbGluayBkb3duXFxuXCIsXG4rXHRcdFx0XHQgICBfX2Z1bmNfXywgcGh5ZGV2LVx1MDAzZW1kaW8uYWRkcik7XG4rXHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbitcdH1cbitcdHBoeV9yZXNvbHZlX2FuZWdfcGF1c2UocGh5ZGV2KTtcbitcdHJldHVybiAwO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXhcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKCk6IHV0cCBwb3dlciBvbi5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRyZXQgPSBwaHk4ODI0X3BhZ2Vfd3JpdGVfd2l0aF9sb2NrKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gcGh5X21vZGlmeShwaHlkZXYsIE1JSV9CTUNSLCBCTUNSX1BET1dOIHwgQk1DUl9JU09MQVRFLCAweDApO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKTogdXRwIHBvd2VyIGRvd24uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9kb3duKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHBoeTg4MjRfcGFnZV93cml0ZV93aXRoX2xvY2socGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiBwaHlfbW9kaWZ5KHBoeWRldiwgTUlJX0JNQ1IsIEJNQ1JfUERPV04sIEJNQ1JfUERPV04pO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcG93ZXJfb24oKSAgLSBzZXQgdXRwIHBvd2VyIG9uLlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBOT1RFOiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0XG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHJldDtcbitcdGludCByO1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlaW50ZXJmYWNlX21vZGUgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1x0XHQvKiB1dHAgcG93ZXIgb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcbitcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiB1dHAgcG93ZXIgb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbityZXRyeTpcbitcdC8qXG4rXHQgKiBJZiB0aGUgUEhZIHVwIG9wZXJhdGlvbiBzdWNjZWVkcyBidXQgdGhlIHN1YnNlcXVlbnQgb3BlcmF0aW9uXG4rXHQgKiBmYWlscywgcmV2ZXJ0IHRvIHRoZSBkZWZhdWx0IHN0YXRlLlxuK1x0ICovXG4rXHRyID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZXN1bWUoKSAtIHJlc3VtZSB0aGUgaGFyZHdhcmVcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHl0ODgyNF9wb3dlcl9vbihwaHlkZXYpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3Bvd2VyX2Rvd24oKSAgLSBzZXQgdXRwIHBvd2VyIGRvd24uXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIE5PVEU6IG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcbisgKlxuKyAqIFJldHVybnM6IDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpwcml2ID0gcGh5X3BhY2thZ2VfZ2V0X3ByaXYocGh5ZGV2KTtcbitcdGludCByZXQ7XG4rXHRpbnQgcjtcbitcbitcdGlmIChwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9ub3JtYWxfdGVzdF9tb2RlX3BhZ2VkKHBoeWRldik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byByZXRyeTtcbitcdH0gZWxzZSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfaW52YWxpZF90ZXN0X21vZGVfcGFnZWQocGh5ZGV2KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHJldHJ5O1xuK1xuK1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zZHNfaXNvbGF0ZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHV0cCBwb3dlciBkb3duICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXG4rXHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc2RzX2lzb2xhdGVfYW5kX3NvZnRyZXNldF9wYWdlZChwaHlkZXYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbitcbityZXRyeTpcbitcdC8qXG4rXHQgKiBJZiB0aGUgUEhZIGRvd24gb3BlcmF0aW9uIHN1Y2NlZWRzIGJ1dCB0aGUgc3Vic2VxdWVudCBvcGVyYXRpb25cbitcdCAqIGZhaWxzLCByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc3RhdGUuXG4rXHQgKi9cbitcdHIgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldik7XG4rXHRpZiAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgciBcdTAwM2MgMClcbitcdFx0cmV0ID0gcjtcbitcdHJldCA9IHl0ODgyNF9yZXN0b3JlX3dvcmtpbmdfc3RhdHVzKHBoeWRldiwgcmV0KTtcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9zdXNwZW5kKCkgLSBzdXNwZW5kIHRoZSBoYXJkd2FyZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRpbnQgcmV0O1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwcml2LVx1MDAzZXNoYXJlZF9sb2NrKTtcbitcdHJldCA9IHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VzaGFyZWRfbG9jayk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2FuZWcoKSAtIGNvbmZpZyBuZWdvdGlhdGlvblxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHN0cnVjdCB5dDg4MjRfc2hhcmVkX3ByaXYgKnByaXYgPSBwaHlfcGFja2FnZV9nZXRfcHJpdihwaHlkZXYpO1xuK1x0aW50IHBoeV9jdHJsID0gMDtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0ID0gcGh5ODgyNF9wYWdlX3dyaXRlX3dpdGhfbG9jayhwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycjtcbitcbitcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4rXHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbitcdFx0cGh5X2N0cmwgPSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RztcbitcbitcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTiwgTURJT19BTl8xMEdCVF9DVFJMLFxuK1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RywgcGh5X2N0cmwpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnI7XG4rXG4rXHRyZXQgPSBfX2dlbnBoeV9jb25maWdfYW5lZyhwaHlkZXYsIHJldCk7XG4rXG4rZXJyOlxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3BoeV9wYWNrYWdlX3Byb2JlX29uY2UoKSAgLSBpbml0IHBoeSBwYWNrYWdlIGZvciBwaHk4ODI0LlxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0c3RydWN0IHl0ODgyNF9zaGFyZWRfcHJpdiAqcHJpdiA9IHBoeV9wYWNrYWdlX2dldF9wcml2KHBoeWRldik7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGh5X3BhY2thZ2VfZ2V0X25vZGUocGh5ZGV2KTtcbitcdGludCByZXM7XG4rXG4rXHRpZiAoIXByaXYgfHwgIW5wKSB7XG4rXHRcdHBoeWRldl9lcnIocGh5ZGV2LCBcIiVzOiBtaXNzaW5nIHNoYXJlZCBwcml2IG9yIERUIG5vZGVcXG5cIixcbitcdFx0XHQgICBfX2Z1bmNfXyk7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1x0LyogSW5pdGlhbGlzZSBzaGFyZWQgbG9jayBmb3IgWVQ4ODI0ICovXG4rXHRtdXRleF9pbml0KFx1MDAyNnByaXYtXHUwMDNlc2hhcmVkX2xvY2spO1xuK1x0cmVzID0gb2ZfZ2V0X3BoeV9tb2RlKG5wLCBcdTAwMjZwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlKTtcbitcdGlmIChyZXMgXHUwMDNjIDApIHtcbitcdFx0cGh5ZGV2X3dhcm4ocGh5ZGV2LCBcIiVzLCBwaHktbW9kZSBtaXNzaW5nIGluIERUUy5cXG5cIiwgX19mdW5jX18pO1xuK1x0XHRwcml2LVx1MDAzZWludGVyZmFjZV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wcm9iZSgpIC0gcGh5ODgyNCBwcm9iZS5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpZiAocGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpKSB7XG4rXHRcdHJldCA9IHl0ODgyNF9waHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4gXHR7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbkBAIC0zMTkwLDEzICs0NzQwLDI5IEBAIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiBcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbiBcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbiBcdH0sXG4rXHR7XG4rXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSxcbitcdFx0Lm5hbWUgPSBcIllUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcIixcbitcdFx0LmdldF9mZWF0dXJlcyA9IHl0ODgyNF9nZXRfZmVhdHVyZXMsXG4rXHRcdC5yZWFkX3BhZ2UgPSB5dDg4MjRfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZSA9IHl0ODgyNF93cml0ZV9wYWdlLFxuK1x0XHQucHJvYmUgPSB5dDg4MjRfcHJvYmUsXG4rXHRcdC5jb25maWdfYW5lZyA9IHl0ODgyNF9jb25maWdfYW5lZyxcbitcdFx0LmFuZWdfZG9uZSA9IHl0ODgyNF9hbmVnX2RvbmUsXG4rXHRcdC5jb25maWdfaW5pdCA9IHl0ODgyNF9jb25maWdfaW5pdCxcbitcdFx0LnJlYWRfc3RhdHVzID0geXQ4ODI0X3JlYWRfc3RhdHVzLFxuK1x0XHQuc29mdF9yZXNldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0LFxuK1x0XHQuc3VzcGVuZCA9IHl0ODgyNF9zdXNwZW5kLFxuK1x0XHQucmVzdW1lID0geXQ4ODI0X3Jlc3VtZSxcbitcdH0sXG4gfTtcbiBcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJQZXRlciBHZWlzXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJGcmFua1wiKTtcbitNT0RVTEVfQVVUSE9SKFwiS3lsZVwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbkBAIC0zMjA2LDYgKzQ3NzIsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXG4rXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gfTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY1xuaW5kZXggODcwOTIwMzExZjlhMC4uZjhlMDNkM2FmYTQ1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmNcbkBAIC0xNDA4LDYgKzE0MDgsMzAgQEAgaW50IGdlbnBoeV9jNDVfZmFzdF9yZXRyYWluKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGJvb2wgZW5hYmxlKVxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbik7XG4gXG4rLyoqXG4rICogZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSAtIGNvbmZpZ3VyZSB0ZW1wbGF0ZSB0ZXN0bW9kZSByZWdpc3RlcnNcbisgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbisgKiBAdGVzdF9tb2RlOiB0ZXN0bW9kZSBpbmNsdWRlcyBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcbisgKlxuKyAqIERlc2NyaXB0aW9uOiBTZXQgdGVtcGxhdGUgdGVzdG1vZGUgaW5jbHVkZSBOb3JtYWwgdG8gVGVzdCBtb2RlIDdcbisgKlxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSAoZS5nLiByZWdpc3RlclxuKyAqIHJlYWQvd3JpdGUgZXJyb3IpLlxuKyAqL1xuK2ludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpXG4re1xuK1x0aW50IGN0cmw7XG4rXG4rXHRpZiAodGVzdF9tb2RlIFx1MDAzYyBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwgfHxcbitcdCAgICB0ZXN0X21vZGUgXHUwMDNlIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzcpXG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcbitcdGN0cmwgPSBGSUVMRF9QUkVQKE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIHRlc3RfbW9kZSk7XG4rXHRyZXR1cm4gcGh5X21vZGlmeV9tbWQocGh5ZGV2LCBNRElPX01NRF9QTUFQTUQsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFLFxuK1x0XHRcdCAgICAgIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX01BU0ssIGN0cmwpO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKTtcbitcbiAvKipcbiAgKiBnZW5waHlfYzQ1X3BsY2FfZ2V0X2NmZyAtIGdldCBQTENBIGNvbmZpZ3VyYXRpb24gZnJvbSBzdGFuZGFyZCByZWdpc3RlcnNcbiAgKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaFxuaW5kZXggM2Q4YWZlNmI3ZjFjNS4uZmI4MjdjYzNjOThmNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5LmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmhcbkBAIC0yMzU3LDYgKzIzNTcsNyBAQCBpbnQgZ2VucGh5X2M0NV9sb29wYmFjayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSwgaW50IHNwZWVkKTtcbiBpbnQgZ2VucGh5X2M0NV9wbWFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X3BtYV9zdXNwZW5kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpO1xuIGludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XG4raW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSk7XG4gaW50IGdlbnBoeV9jNDVfcGxjYV9nZXRfY2ZnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4gXHRcdFx0ICAgIHN0cnVjdCBwaHlfcGxjYV9jZmcgKnBsY2FfY2ZnKTtcbiBpbnQgZ2VucGh5X2M0NV9wbGNhX3NldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvbWRpby5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L21kaW8uaFxuaW5kZXggMDZmNGJjM2MyMGM3MS4uMzUzY2ExM2M2NGZjYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9tZGlvLmhcbkBAIC02Myw2ICs2Myw3IEBAXG4gLyogTWVkaWEtZGVwZW5kZW50IHJlZ2lzdGVycy4gKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NXQVBQT0xcdDEzMFx0LyogMTBHQkFTRS1UIHBhaXIgc3dhcCBcdTAwMjYgcG9sYXJpdHkgKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RYUFdSXHQxMzFcdC8qIDEwR0JBU0UtVCBUWCBwb3dlciBjb250cm9sICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERSAxMzIgLyogVGVzdCBtb2RlIGNvbnRyb2wgKi9cbiAjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1NOUlx0MTMzXHQvKiAxMEdCQVNFLVQgU05SIG1hcmdpbiwgbGFuZSBBLlxuIFx0XHRcdFx0XHQgKiBMYW5lcyBCLUQgYXJlIG51bWJlcmVkIDEzNC0xMzYuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0NTUlx0MTQ3XHQvKiAxMEdCQVNFLVIgZmFzdCByZXRyYWluIHN0YXR1cyBhbmQgY29udHJvbCAqL1xuQEAgLTMyMCw2ICszMjEsMTcgQEBcbiAvKiBQTUEgMTBHQkFTRS1SIEZhc3QgUmV0cmFpbiBzdGF0dXMgYW5kIGNvbnRyb2wgcmVnaXN0ZXIuICovXG4gI2RlZmluZSBNRElPX1BNQV8xMEdCUl9GU1JUX0VOQUJMRVx0MHgwMDAxXHQvKiBGYXN0IHJldHJhaW4gZW5hYmxlICovXG4gXG4rLyogUE1BIDEwR0JBU0UtVCBUZW1wbGF0ZSBUZXN0IE1vZGUgUmVnaXN0ZXIqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTUFTSyBHRU5NQVNLKDE1LCAxMykgLyogVGVtcGxhdGUgdGVzdCBtb2RlICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwgMHgwIC8qIFRlbXBsYXRlIE5vcm1hbCAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSAweDEgLyogVGVtcGxhdGUgVGVzdE1vZGUxICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8yIDB4MiAvKiBUZW1wbGF0ZSBUZXN0TW9kZTIgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzMgMHgzIC8qIFRlbXBsYXRlIFRlc3RNb2RlMyAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNCAweDQgLyogVGVtcGxhdGUgVGVzdE1vZGU0ICovXG4rI2RlZmluZSBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV81IDB4NSAvKiBUZW1wbGF0ZSBUZXN0TW9kZTUgKi9cbisjZGVmaW5lIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzYgMHg2IC8qIFRlbXBsYXRlIFRlc3RNb2RlNiAqL1xuKyNkZWZpbmUgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfNyAweDcgLyogVGVtcGxhdGUgVGVzdE1vZGU3ICovXG4rXG4gLyogUENTIDEwR0JBU0UtUi8tVCBzdGF0dXMgcmVnaXN0ZXIgMS4gKi9cbiAjZGVmaW5lIE1ESU9fUENTXzEwR0JSVF9TVEFUMV9CTEtMS1x0MHgwMDAxXHQvKiBCbG9jayBsb2NrIGF0dGFpbmVkICovXG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMDo1OTo1MS4yMjU5NTQ2OTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODU4Njc4NDAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFuYWx5c2lzOiBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCdzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0ICpkb2VzKi4gSXQgbG9va3MgbGlrZSB3ZSBoYXZlOlxuXG4xLiAgKipEZXZpY2V0cmVlIGJpbmRpbmdzOioqIEEgbmV3IGJpbmRpbmcgZGVmaW5pdGlvbiBmb3IgdGhlIGBtb3RvcmNvbW0seXQ4ODI0YCBkZXZpY2UuIE9rYXksIHN0YW5kYXJkIHN0dWZmIGZvciBkZXZpY2UgZGlzY292ZXJ5LlxuMi4gICoqS2NvbmZpZyB1cGRhdGU6KiogIEVuYWJsaW5nIHN1cHBvcnQgZm9yIHRoZSBZVDg4MjQgUEhZIHdpdGhpbiB0aGUgYFBIWV9QQUNLQUdFYCBmcmFtZXdvcmsuIFRoaXMgc3VnZ2VzdHMgYSBtb2R1bGFyIGRlc2lnbiwgd2hpY2ggaXMgZ29vZC5cbjMuICAqKkNvcmUgZHJpdmVyIGltcGxlbWVudGF0aW9uOioqIFRoZSBtZWF0IG9mIHRoZSBwYXRjaDogYSBuZXcgYG1vdG9yY29tbS5jYCBkcml2ZXIgd2l0aCBhIHRvbiBvZiBuZXcgZnVuY3Rpb25zLCBpbmNsdWRpbmcgc3BlY2lmaWMgcmVhZC93cml0ZSBvcGVyYXRpb25zIChwYWdlZCBhbmQgdW5wYWdlZCksIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmF0aW9uLCBwb3dlciBtYW5hZ2VtZW50LCBhdXRvLW5lZ290aWF0aW9uLCBhbmQgc3RhdHVzIHJlYWQgZnVuY3Rpb25zLiAgVGhleSBzZWVtIHF1aXRlIGxvdyBsZXZlbC4gVGhlcmUncyBhbHNvIGEgbW9kaWZpY2F0aW9uIHRvIGB5dHBoeV9zZXRfd29sYCB3aXRoIGEgY3JpdGljYWwgY2hlY2sgYWRkZWQsIHdoaWNoIGlzIGdvb2Q6IGVuc3VyZXMgdGhhdCBhIGZhaWx1cmUgaW4gdGhlIG1vZGlmaWNhdGlvbiBmdW5jdGlvbiBjb3JyZWN0bHkgcmV0dXJucyB0aGUgZXJyb3IuXG40LiAgKipwaHktYzQ1LmMgdXBkYXRlOioqIEFkZGl0aW9uIG9mIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCwgd2hpY2ggc3VnZ2VzdHMgc29tZSBnZW5lcmljIHRlc3QgbW9kZSBmdW5jdGlvbmFsaXR5LCBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBmb3IgZmF1bHQgaW5qZWN0aW9uLlxuNS4gICoqSGVhZGVyIHVwZGF0ZXM6KiogRnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgbWFjcm9zIGFkZGVkIGluIGBwaHkuaGAgYW5kIGBtZGlvLmhgLiBTdGFuZGFyZCBzdHVmZiwgbmVjZXNzYXJ5IGZvciB0aGUgbmV3IGRyaXZlci5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogKnJlYWNoYWJpbGl0eSouIENhbiB3ZSBhY3R1YWxseSAqaGl0KiB0aGlzIGNvZGUgaW4gYSBmdXp6aW5nIGVudmlyb25tZW50PyAgU3BlY2lmaWNhbGx5LCB0aGUgTW90b3Jjb21tIFlUODgyNCBpcyBhIFBIWSwgYSBwaHlzaWNhbCBsYXllciBkZXZpY2UuIFRoZSBkZXNjcmlwdGlvbiBtZW50aW9ucyB0aGUgODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci4gVGhpcyBtZWFucyBpdCBpbnRlcmFjdHMgd2l0aCBhbiBFdGhlcm5ldCBQSFkgb24gYSBNRElPIGJ1cyBvciBkZXZpY2UgdHJlZS4gIFRoZSBxdWVzdGlvbiBpcyBjYW4gd2UgaW5zdGFudGlhdGUgdGhlc2U/IENhbiB3ZSBlbXVsYXRlIHRoaXMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IGxpa2UgU3l6a2FsbGVyIG9yIFFFTVUgd2l0aG91dCBuZWVkaW5nIGFjdHVhbCBoYXJkd2FyZT9cblxuSSBuZWVkIHRvIGRpZyBkZWVwZXIuIEhvdyBkb2VzIHRoZSBrZXJuZWwgcHJvYmUgZm9yIHRoZXNlIFBIWSBkZXZpY2VzPyAgQXJlIHRoZXJlIHZpcnR1YWwgb3IgbW9jayBNRElPIGJ1cyBpbXBsZW1lbnRhdGlvbnMgd2UgY291bGQgbGV2ZXJhZ2U/IENhbiB3ZSBjcmVhdGUgYW4gTURJTyBidXMgb3IgUEhZIGRldmljZSB2aWEgbmV0bGluaywgYSB2aXJ0dWFsIGJ1cywgb3IgZXZlbiBVU0I/ICBUaGUga2V5IGlzIHRvIGZpZ3VyZSBvdXQgaWYgd2UgY2FuICptb2NrKiB0aGUgZXhpc3RlbmNlIG9mIHRoaXMgaGFyZHdhcmUgb3IsIGZhaWxpbmcgdGhhdCwgaWYgU3l6a2FsbGVyIG9mZmVycyBhbnkgc3VwcG9ydCBmb3IgaW50ZXJhY3Rpbmcgd2l0aCBQSFkgb3IgTURJTyBkZXZpY2VzLiBJIG5lZWQgdG8gc2VhcmNoIHRoZSBrZXJuZWwgc291cmNlIGFuZCBTeXprYWxsZXIgZG9jdW1lbnRhdGlvbiB0byBkZXRlcm1pbmUgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU5MjcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NTEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowMDowOS44MTI3NDA1MjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU2MzE2NzU0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlfZGV2aWNlX3JlZ2lzdGVyXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM9OTMxPXN0YXRpYyBpbnQgeGdiZV9waHlfZmluZF9waHlfZGV2aWNlKHN0cnVjdCB4Z2JlX3Bydl9kYXRhICpwZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTc1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmM6OTc2OlxcdHJldCA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbWQveGdiZS94Z2JlLXBoeS12Mi5jLTk3Ny1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYW1kL3hnYmUveGdiZS1waHktdjIuYzo5Nzg6XFx0XFx0bmV0ZGV2X2VycihwZGF0YS1cXHUwMDNlbmV0ZGV2LCBcXFwicGh5X2RldmljZV9yZWdpc3RlciBmYWlsZWRcXFxcblxcXCIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FtZC94Z2JlL3hnYmUtcGh5LXYyLmMtOTc5LVxcdFxcdHBoeV9kZXZpY2VfZnJlZShwaHlkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hucy9obnNfZHNhZl9tYWMuYz03MTY9aG5zX21hY19yZWdpc3Rlcl9waHlkZXYoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBobnNfbWFjX2NiICptYWNfY2IsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jLTc0NC1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jOjc0NTpcXHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaG5zL2huc19kc2FmX21hYy5jLTc0Ni1cXHRpZiAocmMpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9uZXRzZWMuYz0xOTI5PXN0YXRpYyBpbnQgbmV0c2VjX3JlZ2lzdGVyX21kaW8oc3RydWN0IG5ldHNlY19wcml2ICpwcml2LCB1MzIgcGh5X2FkZHIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmMtMTk4My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmM6MTk4NDpcXHRcXHRyZXQgPSBwaHlfZGV2aWNlX3JlZ2lzdGVyKHByaXYtXFx1MDAzZXBoeWRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jLTE5ODUtXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jLTE5ODgtXFx0XFx0XFx0ZGV2X2Vycihwcml2LVxcdTAwM2VkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L25ldHNlYy5jOjE5ODk6XFx0XFx0XFx0XFx0XFxcInBoeV9kZXZpY2VfcmVnaXN0ZXIgZXJyKCVkKVxcXFxuXFxcIiwgcmV0KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvbmV0c2VjLmMtMTk5MC1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmM9NDI9Zndub2RlX2ZpbmRfbWlpX3RpbWVzdGFtcGVyKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUpXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtNjktXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjcwOmludCBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy03MS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMDMtXFx0ICovXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjEwNDpcXHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTA1LVxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTExNC19XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjExNTpFWFBPUlRfU1lNQk9MKGZ3bm9kZV9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIpO1xcbmRyaXZlcnMvbmV0L21kaW8vZndub2RlX21kaW8uYy0xMTYtXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jPTExNz1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuLS1cXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTQ5LVxcdFxcdC8qIEFsbCBkYXRhIGlzIG5vdyBzdG9yZWQgaW4gdGhlIHBoeSBzdHJ1Y3QsIHNvIHJlZ2lzdGVyIGl0ICovXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1MDpcXHRcXHRyYyA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTUxLVxcdFxcdGlmIChyYykge1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jLTE1Ni1cXHR9IGVsc2UgaWYgKGlzX29mX25vZGUoY2hpbGQpKSB7XFxuZHJpdmVycy9uZXQvbWRpby9md25vZGVfbWRpby5jOjE1NzpcXHRcXHRyYyA9IGZ3bm9kZV9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoYnVzLCBwaHksIGNoaWxkLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9tZGlvL2Z3bm9kZV9tZGlvLmMtMTU4LVxcdFxcdGlmIChyYylcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby14Z2VuZS5jPTI2Mz1zdHJ1Y3QgcGh5X2RldmljZSAqeGdlbmVfZW5ldF9waHlfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLXhnZW5lLmMtMjcwLVxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby14Z2VuZS5jOjI3MTpcXHRpZiAocGh5X2RldmljZV9yZWdpc3RlcihwaHlfZGV2KSlcXG5kcml2ZXJzL25ldC9tZGlvL21kaW8teGdlbmUuYy0yNzItXFx0XFx0cGh5X2RldmljZV9mcmVlKHBoeV9kZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmM9MzI9c3RhdGljIGludCBvZl9nZXRfcGh5X2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCB1MzIgKnBoeV9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jLTM2LVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjM3OmludCBvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG1paV9idXMgKm1kaW8sIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMzgtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRldmljZV9ub2RlICpjaGlsZCwgdTMyIGFkZHIpXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtMzkte1xcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQwOlxcdHJldHVybiBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKG1kaW8sIHBoeSxcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00MS1cXHRcXHRcXHRcXHRcXHRcXHQgIG9mX2Z3bm9kZV9oYW5kbGUoY2hpbGQpLFxcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9vZl9tZGlvLmMtNDMtfVxcbmRyaXZlcnMvbmV0L21kaW8vb2ZfbWRpby5jOjQ0OkVYUE9SVF9TWU1CT0wob2ZfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9tZGlvL29mX21kaW8uYy00NS1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz0xMzE9c3RydWN0IHBoeV9kZXZpY2UgKmZpeGVkX3BoeV9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqc3RhdHVzLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTE2Mi1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MTYzOlxcdHJldCA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMTY0LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1c19wcm92aWRlci5jPTQwOD1zdGF0aWMgc3RydWN0IHBoeV9kZXZpY2UgKm1kaW9idXNfc2NhbihzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkciwgYm9vbCBjNDUpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00MzctXFxuZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzX3Byb3ZpZGVyLmM6NDM4OlxcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvbWRpb19idXNfcHJvdmlkZXIuYy00MzktXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmM9NTUxPXN0YXRpYyB2b2lkIHRqYTExMDJfcDFfcmVnaXN0ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L254cC10amExMXh4LmMtNTk3LVxcbmRyaXZlcnMvbmV0L3BoeS9ueHAtdGphMTF4eC5jOjU5ODpcXHRcXHRyZXQgPSBvZl9tZGlvYnVzX3BoeV9kZXZpY2VfcmVnaXN0ZXIoYnVzLCBwaHksIGNoaWxkLCBhZGRyKTtcXG5kcml2ZXJzL25ldC9waHkvbnhwLXRqYTExeHguYy01OTktXFx0XFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xMTAzPUVYUE9SVF9TWU1CT0woZ2V0X3BoeV9kZXZpY2UpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTA1LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTEwNjogKiBwaHlfZGV2aWNlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgdGhlIHBoeSBkZXZpY2Ugb24gdGhlIE1ESU8gYnVzXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTA3LSAqIEBwaHlkZXY6IHBoeV9kZXZpY2Ugc3RydWN0dXJlIHRvIGJlIGFkZGVkIHRvIHRoZSBNRElPIGJ1c1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTEwOC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExMDk6aW50IHBoeV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExMTAte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTQxLX1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNDI6RVhQT1JUX1NZTUJPTChwaHlfZGV2aWNlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDMtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTExNDgtICogVGhpcyBkb2Vzbid0IGZyZWUgdGhlIHBoeV9kZXZpY2UgaXRzZWxmLCBpdCBtZXJlbHkgcmV2ZXJzZXMgdGhlIGVmZmVjdHNcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjExNDk6ICogb2YgcGh5X2RldmljZV9yZWdpc3RlcigpLiBVc2UgcGh5X2RldmljZV9mcmVlKCkgdG8gZnJlZSB0aGUgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xMTUwLSAqIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi5cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYz0yMTA1PXN0YXRpYyBpbnQgc2ZwX3NtX3Byb2JlX3BoeShzdHJ1Y3Qgc2ZwICpzZnAsIGludCBhZGRyLCBib29sIGlzX2M0NSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYy0yMTIwLVxcbmRyaXZlcnMvbmV0L3BoeS9zZnAuYzoyMTIxOlxcdGVyciA9IHBoeV9kZXZpY2VfcmVnaXN0ZXIocGh5KTtcXG5kcml2ZXJzL25ldC9waHkvc2ZwLmMtMjEyMi1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIxMjMtXFx0XFx0cGh5X2RldmljZV9mcmVlKHBoeSk7XFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jOjIxMjQ6XFx0XFx0ZGV2X2VycihzZnAtXFx1MDAzZWRldiwgXFxcInBoeV9kZXZpY2VfcmVnaXN0ZXIgZmFpbGVkOiAlcGVcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvcGh5L3NmcC5jLTIxMjUtXFx0XFx0XFx0RVJSX1BUUihlcnIpKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xMS0jaWYgSVNfRU5BQkxFRChDT05GSUdfRldOT0RFX01ESU8pXFxuaW5jbHVkZS9saW51eC9md25vZGVfbWRpby5oOjEyOmludCBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0xMy1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaD0xNj1pbnQgZndub2RlX21kaW9idXNfcmVnaXN0ZXJfcGh5KHN0cnVjdCBtaWlfYnVzICpidXMsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Z3bm9kZV9tZGlvLmgtMTktI2Vsc2UgLyogQ09ORklHX0ZXTk9ERV9NRElPICovXFxuaW5jbHVkZS9saW51eC9md25vZGVfbWRpby5oOjIwOmludCBmd25vZGVfbWRpb2J1c19waHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBtaWlfYnVzICptZGlvLFxcbmluY2x1ZGUvbGludXgvZndub2RlX21kaW8uaC0yMS1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG4tLVxcbmluY2x1ZGUvbGludXgvb2ZfbWRpby5oPTQ5PWJvb2wgb2ZfcGh5X2lzX2ZpeGVkX2xpbmsoc3RydWN0IGRldmljZV9ub2RlICpucCk7XFxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmg6NTA6aW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSxcXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC01MS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLCB1MzIgYWRkcik7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaD0xNDA9c3RhdGljIGlubGluZSBib29sIG9mX3BoeV9pc19maXhlZF9saW5rKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC0xNDQtXFxuaW5jbHVkZS9saW51eC9vZl9tZGlvLmg6MTQ1OnN0YXRpYyBpbmxpbmUgaW50IG9mX21kaW9idXNfcGh5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3QgbWlpX2J1cyAqbWRpbyxcXG5pbmNsdWRlL2xpbnV4L29mX21kaW8uaC0xNDYtXFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHksXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BoeS5oPTIxNzc9c3RydWN0IHBoeV9kZXZpY2UgKmdldF9waHlfZGV2aWNlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBib29sIGlzX2M0NSk7XFxuaW5jbHVkZS9saW51eC9waHkuaDoyMTc4OmludCBwaHlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBwaHlfZGV2aWNlICpwaHkpO1xcbmluY2x1ZGUvbGludXgvcGh5LmgtMjE3OS12b2lkIHBoeV9kZXZpY2VfZnJlZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDA6MTEuMzc1OTE2NTAxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTQ3ODY1Njc4OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBQSFkgRHJpdmVyIE1hdGNoaW5nIGFuZCBQcm9iaW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGEgUEhZIGRyaXZlciwgc3BlY2lmaWNhbGx5IG9uZSBkZXNpZ25lZCBmb3Igc29tZXRoaW5nIGxpa2UgYSBNb3RvcmNvbW0gWVQ4ODI0LCBhY3R1YWxseSBnZXRzIG1hdGNoZWQgYW5kIHByb2JlZCBpbiB0aGUga2VybmVsLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGZ1bmRhbWVudGFsIGZsb3cuIFJpZ2h0LCBsb29raW5nIGF0IGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCwgdGhlIGtleSBmdW5jdGlvbnMgYXJlIGBwaHlfYnVzX21hdGNoYCBhbmQgYHBoeV9wcm9iZWAuIE5vdywgZm9yIGRyaXZlcnMgbGlrZSB0aGUgYG1vdG9yY29tbV9waHlfZHJ2c2AsIG15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCB0aGUgbWF0Y2hpbmcgcHJvY2VzcyByZWxpZXMgb24gaWRlbnRpZnlpbmcgdGhlIFBIWSBiYXNlZCBvbiBpdHMgYHBoeV9pZGAuIFNwZWNpZmljYWxseSwgaXQgdXNlcyBzb21ldGhpbmcgbGlrZSBgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpYC4gVGhhdCdzIHRoZSBkcml2ZXIncyB1bmlxdWUgaWRlbnRpZmllci5cblxuQnV0IGhlcmUncyB3aGVyZSBJIG5lZWQgdG8gY2xhcmlmeSB0aGluZ3MuIFdoZXJlIGV4YWN0bHkgZG9lcyB0aGlzIGBwaHlkZXZgIHN0cnVjdHVyZSBvcmlnaW5hdGUgZnJvbT8gSSBiZWxpZXZlIGl0J3MgZWl0aGVyIHRocm91Z2ggYW4gTURJTyBidXMgc2Nhbm5pbmcgcHJvY2Vzcywgb3IgcG90ZW50aWFsbHkgZnJvbSBhIGRldmljZSB0cmVlIHJlZ2lzdHJhdGlvbi4gSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy5cblxuTm93LCBteSByZWFsIHF1ZXN0aW9uIGlzIHJlZ2FyZGluZyB0aGUgdGVzdGluZyBlbnZpcm9ubWVudC4gRG9lcyBRRU1VLCBvciBldmVuIHRoZSBkcmVhZGVkIHN5emthbGxlciwgcHJvdmlkZSBhIHJlYWxpc3RpYyBzY2VuYXJpbyB3aXRoIGFuIE1ESU8gYnVzIG9yLCBtb3JlIHNwZWNpZmljYWxseSwgYW4gYWN0dWFsIE1vdG9yY29tbSBZVDg4MjQgUEhZIGNoaXAgdGhhdCBJIGNhbiBpbnRlcmFjdCB3aXRoPyBJdCdzIGEgbG9uZyBzaG90LCBidXQgbWF5YmUuLi4gV2FpdCBhIG1pbnV0ZS4uLiBDb3VsZCBVU0IgbmV0IG9yIFVTQiBFdGhlcm5ldCBhZGFwdGVycyBwb3RlbnRpYWxseSBleHBvc2Ugb3IgdXRpbGl6ZSBNRElPIGJ1c2VzPyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIEl0J3MgYSBsb25nIHNob3QsIGJ1dCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYW55IHBvdGVudGlhbCBVU0IgZGV2aWNlcyB0aGF0IG1pZ2h0IHV0aWxpemUgcGh5bGliIG9yIGFuIE1ESU8gYnVzLiBJIHNob3VsZCBsb29rIGludG8gdGhvc2UgZHJpdmVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzA2MjAsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDA6MjYuMTYyNDg2MDUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjk4MTQ5NzEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9idXNfcmVnaXN0ZXIuKnVzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDA6MjguMzMyMzEwNzA0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjYyNDc2OTUzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGEgc2Vhc29uZWQgcHJvZmVzc2lvbmFsIGluIHRoZSBmaWVsZCwgc3BlYWtpbmcgZGlyZWN0bHkgdG8gYW5vdGhlciBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgVVNCIE5ldHdvcmsgRHJpdmVyIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGRyaXZlcnMvbmV0L3VzYiBhcmVhLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgbmV0d29yayBhc3BlY3QgdGhhdCB1dGlsaXplcyBVU0IgY29ubmVjdGlvbnMuIE15IGluaXRpYWwgZm9jdXMgaXMgdG8gcGlucG9pbnQgYW55IHBvdGVudGlhbCB0cm91YmxlIHNwb3RzIG9yIGFyZWFzIHJpcGUgZm9yIG9wdGltaXphdGlvbiB3aXRoaW4gdGhpcyBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBjb2RlYmFzZS4gSSBuZWVkIHRvIGdldCBhIGhpZ2gtbGV2ZWwgb3ZlcnZpZXcgb2YgdGhlIGltcGxlbWVudGF0aW9uLCBtYWtpbmcgc3VyZSBpdCBhbGlnbnMgd2l0aCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3Igb2YgbmV0d29yayBkYXRhIGV4Y2hhbmdlIGFuZCBkYXRhIHRyYW5zZmVyLiBBbnkgaXJyZWd1bGFyaXRpZXMgaGVyZT8gQ29tcGF0aWJpbGl0eSBpc3N1ZXM/IExldOKAmXMgc2VlIHdoYXQgd2UgY2FuIGZpbmQuIEkgd2FudCB0byBjaGVjayBmb3IgZWZmaWNpZW50IHJlc291cmNlIG1hbmFnZW1lbnQsIHBvdGVudGlhbCBib3R0bGVuZWNrcywgb3IgcmFjZSBjb25kaXRpb25zLiBLbm93aW5nIHRoZSBhcmNoaXRlY3R1cmUgb2YgbmV0d29yayBkYXRhIG1hbmFnZW1lbnQgaW5zaWRlIGEgVVNCIGNvbm5lY3Rpb24gaXMgbXkgcHJpb3JpdHkuIExldCdzIHN0YXJ0IHRoZSBldmFsdWF0aW9uIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzExODgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowMDozMC45NTcwODIzMDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2Mzg3MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2RldmljZXxtZGlvYnVzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3VzYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeC5oPTE3OD1zdHJ1Y3QgYXNpeF9jb21tb25fcHJpdmF0ZSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oLTE4NS1cXHRzdHJ1Y3QgbWlpX2J1cyAqbWRpbztcXG5kcml2ZXJzL25ldC91c2IvYXNpeC5oOjE4NjpcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4Lmg6MTg3OlxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZfaW50O1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4LmgtMTg4LVxcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTY2OT1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02NzMtXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY3NDpcXHRwcml2LVxcdTAwM2VtZGlvID0gbWRpb2J1c19hbGxvYygpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02NzUtXFx0aWYgKCFwcml2LVxcdTAwM2VtZGlvKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njg3OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OC1cXHRpZiAocmV0KSB7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OS1cXHRcXHRuZXRkZXZfZXJyKGRldi1cXHUwMDNlbmV0LCBcXFwiQ291bGQgbm90IHJlZ2lzdGVyIE1ESU8gYnVzIChlcnIgJWQpXFxcXG5cXFwiLCByZXQpO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2OTA6XFx0XFx0bWRpb2J1c19mcmVlKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02OTEtXFx0XFx0cHJpdi1cXHUwMDNlbWRpbyA9IE5VTEw7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9Njk3PXN0YXRpYyB2b2lkIGF4ODg3NzJfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBhc2l4X2NvbW1vbl9wcml2YXRlICpwcml2KVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02OTgte1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo2OTk6XFx0bWRpb2J1c191bnJlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYzo3MDA6XFx0bWRpb2J1c19mcmVlKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03MDEtfVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTcwMz1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9waHkoc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcwNy1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzA4OlxcdHByaXYtXFx1MDAzZXBoeWRldiA9IG1kaW9idXNfZ2V0X3BoeShwcml2LVxcdTAwM2VtZGlvLCBwcml2LVxcdTAwM2VwaHlfYWRkcik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTcwOS1cXHRpZiAoIXByaXYtXFx1MDAzZXBoeWRldikge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTczMS1cXHQgKi9cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzMyOlxcdHByaXYtXFx1MDAzZXBoeWRldl9pbnQgPSBtZGlvYnVzX2dldF9waHkocHJpdi1cXHUwMDNlbWRpbywgQVhfRU1CRF9QSFlfQUREUik7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTczMy1cXHRpZiAoIXByaXYtXFx1MDAzZXBoeWRldl9pbnQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYz03NjI9c3RhdGljIHZvaWQgYXg4ODc3Ml9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6NzYzOlxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy03NjQtXFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9MTg9c3RydWN0IGF4ODgxNzJhX3ByaXZhdGUge1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTE5LVxcdHN0cnVjdCBtaWlfYnVzICptZGlvO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjIwOlxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMjEtXFx0Y2hhciBwaHlfbmFtZVtQSFlfSURfU0laRV07XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz0yOT1zdGF0aWMgdm9pZCBheDg4MTcyYV9hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTMwLXtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzozMTpcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gbmV0ZGV2LVxcdTAwM2VwaHlkZXY7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMzItXFx0c3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jPTYxPXN0YXRpYyBpbnQgYXg4ODE3MmFfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTY1LVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjY2OlxcdHByaXYtXFx1MDAzZW1kaW8gPSBtZGlvYnVzX2FsbG9jKCk7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtNjctXFx0aWYgKCFwcml2LVxcdTAwM2VtZGlvKSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03OS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo4MDpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTgxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTg5LW1mcmVlOlxcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjkwOlxcdG1kaW9idXNfZnJlZShwcml2LVxcdTAwM2VtZGlvKTtcXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy05MS1cXHRyZXR1cm4gcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9OTQ9c3RhdGljIHZvaWQgYXg4ODE3MmFfcmVtb3ZlX21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtOTgtXFx0bmV0ZGV2X2luZm8oZGV2LVxcdTAwM2VuZXQsIFxcXCJkZXJlZ2lzdGVyaW5nIG1kaW8gYnVzICVzXFxcXG5cXFwiLCBwcml2LVxcdTAwM2VtZGlvLVxcdTAwM2VpZCk7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6OTk6XFx0bWRpb2J1c191bnJlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jOjEwMDpcXHRtZGlvYnVzX2ZyZWUocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmMtMTAxLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9NDEzPXN0cnVjdCBsYW43OHh4X25ldCB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ0MS1cXHRzdHJ1Y3QgbXV0ZXhcXHRcXHRkZXZfbXV0ZXg7IC8qIHNlcmlhbGlzZSBvcGVuL3N0b3Agd3J0IHN1c3BlbmQvcmVzdW1lICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzo0NDI6XFx0c3RydWN0IG11dGV4XFx0XFx0bWRpb2J1c19tdXRleDsgLyogZm9yIE1ESU8gYnVzIGFjY2VzcyAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtNDQzLVxcdHVuc2lnbmVkIGludFxcdFxcdHBpcGVfaW4sIHBpcGVfb3V0LCBwaXBlX2ludHI7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ1OC1cXHR1MzJcXHRcXHRcXHRjaGlwcmV2O1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6NDU5OlxcdHN0cnVjdCBtaWlfYnVzXFx0XFx0Km1kaW9idXM7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy00NjAtXFx0cGh5X2ludGVyZmFjZV90XFx0XFx0aW50ZXJmYWNlO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz05NDY9c3RhdGljIGludCBsYW43OHh4X2ZsdXNoX3J4X2ZpZm8oc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTk1MC1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjk1MTovKiBMb29wIHVudGlsIHRoZSByZWFkIGlzIGNvbXBsZXRlZCB3aXRoIHRpbWVvdXQgY2FsbGVkIHdpdGggbWRpb2J1c19tdXRleCBoZWxkICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzo5NTI6c3RhdGljIGludCBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTk1My17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTE1ODI9c3RhdGljIGludCBsYW43OHh4X21hY19yZXNldChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMTU4Ny1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjE1ODg6XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VtZGlvYnVzX211dGV4KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTE1ODktXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTE1OTMtXFx0ICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoxNTk0OlxcdHJldCA9IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNTk1LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNjIyLWV4aXRfdW5sb2NrOlxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MTYyMzpcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlbWRpb2J1c19tdXRleCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0xNjI0LVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0xOTQ0PXN0YXRpYyBpbnQgbGFuNzh4eF9pbml0X21hY19hZGRyZXNzKHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDExLS8qIE1ESU8gcmVhZCBhbmQgd3JpdGUgd3JhcHBlcnMgZm9yIHBoeWxpYiAqL1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjAxMjpzdGF0aWMgaW50IGxhbjc4eHhfbWRpb2J1c19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBpZHgpXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDEzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAyMS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwMjI6XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VtZGlvYnVzX211dGV4KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwMjMtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDI0LVxcdC8qIGNvbmZpcm0gTUlJIG5vdCBidXN5ICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDI1OlxcdHJldCA9IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDI2LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDM0LVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjAzNTpcXHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjAzNi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA0NS1kb25lOlxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA0NjpcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlbWRpb2J1c19tdXRleCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDQ3LVxcdHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtXFx1MDAzZWludGYpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDUxLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA1MjpzdGF0aWMgaW50IGxhbjc4eHhfbWRpb2J1c193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgaWR4LFxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA1My1cXHRcXHRcXHRcXHQgdTE2IHJlZ3ZhbClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA2Mi1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwNjM6XFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGV2LVxcdTAwM2VtZGlvYnVzX211dGV4KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwNjQtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDY1LVxcdC8qIGNvbmZpcm0gTUlJIG5vdCBidXN5ICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDY2OlxcdHJldCA9IGxhbjc4eHhfbWRpb2J1c193YWl0X25vdF9idXN5KGRldik7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDY3LVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDgwLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA4MTpcXHRyZXQgPSBsYW43OHh4X21kaW9idXNfd2FpdF9ub3RfYnVzeShkZXYpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4Mi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjA4NS1kb25lOlxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjA4NjpcXHRtdXRleF91bmxvY2soXFx1MDAyNmRldi1cXHUwMDNlbWRpb2J1c19tdXRleCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMDg3LVxcdHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtXFx1MDAzZWludGYpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yMDkxPXN0YXRpYyBpbnQgbGFuNzh4eF9tZGlvX2luaXQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwOTUtXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMDk2OlxcdGRldi1cXHUwMDNlbWRpb2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIwOTc6XFx0aWYgKCFkZXYtXFx1MDAzZW1kaW9idXMpIHtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIwOTgtXFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcImNhbid0IGFsbG9jYXRlIE1ESU8gYnVzXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEwMS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDI6XFx0ZGV2LVxcdTAwM2VtZGlvYnVzLVxcdTAwM2Vwcml2ID0gKHZvaWQgKilkZXY7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTAzOlxcdGRldi1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlcmVhZCA9IGxhbjc4eHhfbWRpb2J1c19yZWFkO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwNDpcXHRkZXYtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXdyaXRlID0gbGFuNzh4eF9tZGlvYnVzX3dyaXRlO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwNTpcXHRkZXYtXFx1MDAzZW1kaW9idXMtXFx1MDAzZW5hbWUgPSBcXFwibGFuNzh4eC1tZGlvYnVzXFxcIjtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMDY6XFx0ZGV2LVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VwYXJlbnQgPSBcXHUwMDI2ZGV2LVxcdTAwM2V1ZGV2LVxcdTAwM2VkZXY7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTA3LVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEwODpcXHRzbnByaW50ZihkZXYtXFx1MDAzZW1kaW9idXMtXFx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFxcXCJ1c2ItJTAzZDolMDNkXFxcIixcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMDktXFx0XFx0IGRldi1cXHUwMDNldWRldi1cXHUwMDNlYnVzLVxcdTAwM2VidXNudW0sIGRldi1cXHUwMDNldWRldi1cXHUwMDNlZGV2bnVtKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjExNC1cXHRcXHQvKiBzZXQgdG8gaW50ZXJuYWwgUEhZIGlkICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTE1OlxcdFxcdGRldi1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlcGh5X21hc2sgPSB+KDEgXFx1MDAzY1xcdTAwM2MgMSk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTE2LVxcdFxcdGJyZWFrO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIxLVxcdG5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldi5vZl9ub2RlLCBcXFwibWRpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEyMjpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cXHUwMDNlbWRpb2J1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIzLVxcdG9mX25vZGVfcHV0KG5vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTI4LVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEyOTpcXHRuZXRkZXZfZGJnKGRldi1cXHUwMDNlbmV0LCBcXFwicmVnaXN0ZXJlZCBtZGlvYnVzIGJ1cyAlc1xcXFxuXFxcIiwgZGV2LVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VpZCk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTMwLVxcdHJldHVybiAwO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjEzMS1leGl0MTpcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMzI6XFx0bWRpb2J1c19mcmVlKGRldi1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTMzLVxcdHJldHVybiByZXQ7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTIxMzY9c3RhdGljIHZvaWQgbGFuNzh4eF9yZW1vdmVfbWRpbyhzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMzcte1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEzODpcXHRtZGlvYnVzX3VucmVnaXN0ZXIoZGV2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjIxMzk6XFx0bWRpb2J1c19mcmVlKGRldi1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTQwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjQ3Nz1zdGF0aWMgdm9pZCBsYW43OHh4X21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjQ3ODpcXHRcXHRcXHRcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5LFxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjQ3OS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjYyNj1zdGF0aWMgaW50IGxhbjc4eHhfc2V0X2ZpeGVkX2xpbmsoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI2NDgtICovXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyNjQ5OnN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqbGFuNzh4eF9nZXRfcGh5KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjY1MC17XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyNjUxOlxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yNjUyLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjY1My1cXHQvKiBBdHRlbXB0IHRvIGxvY2F0ZSBhIFBIWSBvbiB0aGUgTURJTyBidXMgKi9cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjI2NTQ6XFx0cGh5ZGV2ID0gcGh5X2ZpbmRfZmlyc3QoZGV2LVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI2NTUtXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTI3Njk9c3RhdGljIGludCBsYW43OHh4X2NvbmZpZ3VyZV9sZWRzX2Zyb21fZHQoc3RydWN0IGxhbjc4eHhfbmV0ICpkZXYsXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyNzcwOlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI3NzEte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYz0yODU4PXN0YXRpYyBpbnQgbGFuNzh4eF9waHlfaW5pdChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTI4NTkte1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6Mjg2MDpcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmMtMjg2MS1cXHRpbnQgcmV0O1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yOTA0LVxcdFxcdG5ldGRldl9lcnIoZGV2LVxcdTAwM2VuZXQsIFxcXCJjYW4ndCBhdHRhY2ggUEhZIHRvICVzLCBlcnJvciAlcGVcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyOTA1OlxcdFxcdFxcdCAgIGRldi1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlaWQsIEVSUl9QVFIocmV0KSk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yOTA2LVxcdFxcdGdvdG8gcGh5bGlua191bmluaXQ7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTQ2NTU9c3RhdGljIGludCBsYW43OHh4X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLFxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy00Njg4LVxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNmRldi1cXHUwMDNlcnhxX292ZXJmbG93KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jOjQ2ODk6XFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VtZGlvYnVzX211dGV4KTtcXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTQ2OTAtXFx0bXV0ZXhfaW5pdChcXHUwMDI2ZGV2LVxcdTAwM2VkZXZfbXV0ZXgpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9NjA9c3RydWN0IHNtc2M5NXh4X3ByaXYge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtNzQtXFx0c3RydWN0IGZ3bm9kZV9oYW5kbGUgKmlycWZ3bm9kZTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzo3NTpcXHRzdHJ1Y3QgbWlpX2J1cyAqbWRpb2J1cztcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzo3NjpcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTc3LVxcdHN0cnVjdCB0YXNrX3N0cnVjdCAqcG1fdGFzaztcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jPTIxOD1zdGF0aWMgdm9pZCBzbXNjOTV4eF9tZGlvX3dyaXRlKHN0cnVjdCB1c2JuZXQgKmRldiwgaW50IHBoeV9pZCwgaW50IGlkeCxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTI1OS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoyNjA6c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMjYxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTI5Ni1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoyOTc6c3RhdGljIGludCBzbXNjOTV4eF9tZGlvYnVzX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeClcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0yOTgte1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMzAzLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjMwNDpzdGF0aWMgaW50IHNtc2M5NXh4X21kaW9idXNfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGlkeCxcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0zMDUtXFx0XFx0XFx0XFx0ICB1MTYgcmVndmFsKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9Nzk4PXN0YXRpYyBpbnQgc21zYzk1eHhfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy04MDItXFx0c3RydWN0IHNtc2M5NXh4X3ByaXYgKnBkYXRhO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjgwMzpcXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTgwNC1cXHRzdHJ1Y3QgdXNibmV0ICpkZXY7XFxuLS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xMTQ3PXN0YXRpYyBpbnQgc21zYzk1eHhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTIxNy1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjE4OlxcdHBkYXRhLVxcdTAwM2VtZGlvYnVzID0gbWRpb2J1c19hbGxvYygpO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMTk6XFx0aWYgKCFwZGF0YS1cXHUwMDNlbWRpb2J1cykge1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyMjAtXFx0XFx0cmV0ID0gLUVOT01FTTtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyMjktXFx0aWYgKHBkYXRhLVxcdTAwM2Vpc19pbnRlcm5hbF9waHkpXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTIzMDpcXHRcXHRwZGF0YS1cXHUwMDNlbWRpb2J1cy1cXHUwMDNlcGh5X21hc2sgPSB+KDF1IFxcdTAwM2NcXHUwMDNjIFNNU0M5NVhYX0lOVEVSTkFMX1BIWV9JRCk7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTIzMS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjMyOlxcdHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2Vwcml2ID0gZGV2O1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzM6XFx0cGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXJlYWQgPSBzbXNjOTV4eF9tZGlvYnVzX3JlYWQ7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTIzNDpcXHRwZGF0YS1cXHUwMDNlbWRpb2J1cy1cXHUwMDNld3JpdGUgPSBzbXNjOTV4eF9tZGlvYnVzX3dyaXRlO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzU6XFx0cGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXJlc2V0ID0gc21zYzk1eHhfbWRpb2J1c19yZXNldDtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjM2OlxcdHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VuYW1lID0gXFxcInNtc2M5NXh4LW1kaW9idXNcXFwiO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzc6XFx0cGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZXBhcmVudCA9IFxcdTAwMjZkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjM4LVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyMzk6XFx0c25wcmludGYocGRhdGEtXFx1MDAzZW1kaW9idXMtXFx1MDAzZWlkLCBBUlJBWV9TSVpFKHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VpZCksXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0MC1cXHRcXHQgXFxcInVzYi0lMDNkOiUwM2RcXFwiLCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWJ1cy1cXHUwMDNlYnVzbnVtLCBkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldm51bSk7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0MS1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjQyOlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocGRhdGEtXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDMtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0Ny1cXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjQ4OlxcdHBkYXRhLVxcdTAwM2VwaHlkZXYgPSBwaHlfZmluZF9maXJzdChwZGF0YS1cXHUwMDNlbWRpb2J1cyk7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI0OS1cXHRpZiAoIXBkYXRhLVxcdTAwM2VwaHlkZXYpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyODgtXFx0aWYgKHJldCkge1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyODk6XFx0XFx0bmV0ZGV2X2VycihkZXYtXFx1MDAzZW5ldCwgXFxcImNhbid0IGF0dGFjaCBQSFkgdG8gJXNcXFxcblxcXCIsIHBkYXRhLVxcdTAwM2VtZGlvYnVzLVxcdTAwM2VpZCk7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMtMTI5MC1cXHRcXHRnb3RvIHVucmVnaXN0ZXJfbWRpbztcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyOTctdW5yZWdpc3Rlcl9tZGlvOlxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEyOTg6XFx0bWRpb2J1c191bnJlZ2lzdGVyKHBkYXRhLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjk5LVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEzMDAtZnJlZV9tZGlvOlxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEzMDE6XFx0bWRpb2J1c19mcmVlKHBkYXRhLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMzAyLVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTMxNz1zdGF0aWMgdm9pZCBzbXNjOTV4eF91bmJpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEzMjEtXFx0cGh5X2Rpc2Nvbm5lY3QoZGV2LVxcdTAwM2VuZXQtXFx1MDAzZXBoeWRldik7XFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTMyMjpcXHRtZGlvYnVzX3VucmVnaXN0ZXIocGRhdGEtXFx1MDAzZW1kaW9idXMpO1xcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jOjEzMjM6XFx0bWRpb2J1c19mcmVlKHBkYXRhLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMzI0LVxcdGlycV9kaXNwb3NlX21hcHBpbmcoaXJxX2ZpbmRfbWFwcGluZyhwZGF0YS1cXHUwMDNlaXJxZG9tYWluLCBQSFlfSFdJUlEpKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDA6MzEuMDAzNzI3MjU0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDUyMzk0NTAxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIElucXVpcnk6IFVTQiBHYWRnZXQgRW11bGF0aW9uIGFuZCBQSFkgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBob2xkIG9uIGEgc2Vjb25kISBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgc29tZXRoaW5nIHJlZ2FyZGluZyBVU0IgZ2FkZ2V0IGVtdWxhdGlvbi4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8ga25vdyBpZiB0aGUgYHJhd19nYWRnZXRgIGRyaXZlciBjYW4gZWZmZWN0aXZlbHkgZW11bGF0ZSBhIFVTQi10by1FdGhlcm5ldCBhZGFwdGVyIGxpa2UgYW4gQVNJWCBBWDg4MTcyQSwgU01TQzk1eHgsIG9yIGV2ZW4gYW4gQVNJWC1iYXNlZCBkZXZpY2UgbGlrZSB0aGUgTEFONzh4eC5cblxuSWYgc28sIEknbSB0aGlua2luZyBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBJZiBJJ20gc3VjY2Vzc2Z1bGx5IGVtdWxhdGluZyBvbmUgb2YgdGhlc2UgdmlhIGByYXdfZ2FkZ2V0YCBhbmQgdXNpbmcgdGhlIGBkdW1teV9oY2RgLCB3aGF0IGhhcHBlbnMgd2hlbiB0aGUgTURJTyBidXMgY29tZXMgaW50byBwbGF5PyBSaWdodCwgdGhlIGRldmljZSByZWdpc3RlcnMgYW4gTURJTyBidXMgd2l0aCBgbWRpb2J1c19yZWdpc3Rlcihwcml2LVx1MDAzZW1kaW8pYC5cblxuSSBoYXZlIHRvIGRpdmUgZGVlcGVyIGludG8gYG1kaW9idXNfcmVnaXN0ZXJgLCBlc3BlY2lhbGx5IHRoZSBgbWRpb2J1c19zY2FuYCBmdW5jdGlvbi4gQXMgSSByZWNhbGwsIHRoaXMgaXMgd2hlcmUgdGhlIHN5c3RlbSB0cmllcyB0byBkZXRlcm1pbmUgd2hhdCdzIG9uIHRoZSBNRElPIGJ1cyBieSByZWFkaW5nIGBNSUlfUEhZU0lEMWAgYW5kIGBNSUlfUEhZU0lEMmAgdXNpbmcgdGhlIGBidXMtXHUwMDNlcmVhZCgpYCBmdW5jdGlvbi4gVGhpcyBnZXRzIG1lIHRoaW5raW5nLi4uXG5cbk5vdywgaGVyZSdzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIFdoYXQgaWYgdGhlIGVtdWxhdGVkIFVTQiBkZXZpY2UgKnJlc3BvbmRzKiB3aXRoIGFyYml0cmFyeSB2YWx1ZXMgZHVyaW5nIHRoZSBgbWRpb2J1c19zY2FuYD8gTGV0J3Mgc2F5LCBpdCByZXR1cm5zIGEgUEhZIElELCBsaWtlIHRoZSBvbmUgZm9yIGEgWVQ4ODI0LCB3aGljaCBpcyBgUEhZX0lEX1lUODgyNGAgKDB4NGY1MWU4YjgpLiBJcyB0aGF0IHBvc3NpYmxlPyBJdCBzaG91bGQgYmUhXG5cbldhaXQgYSBtaW51dGUsIGxldCBtZSBwdWxsIHVwIHRoZSBjb2RlIGZvciBgeXQ4ODI0X3Byb2JlYCFcblxuYGBgY1xuc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbntcblx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGh5ZGV2LVx1MDAzZW1kaW8uZGV2O1xuXHRzdHJ1Y3QgeXQ4ODI0X3NoYXJlZF9wcml2ICpzaGFyZWRfcHJpdjtcblx0aW50IHJldDtcblxuXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcblx0aWYgKHJldClcblx0XHRyZXR1cm4gcmV0O1xuXG5cdGlmIChwaHlfcGFja2FnZV9wcm9iZV9vbmNlKHBoeWRldikpIHtcblx0XHRyZXQgPSB5dDg4MjRfcGh5X3BhY2thZ2VfcHJvYmVfb25jZShwaHlkZXYpO1xuXHRcdGlmIChyZXQpXG5cdFx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0cmV0dXJuIDA7XG59XG5gYGBcblxuT2theSwgdGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uIGlzIHBhcnRpY3VsYXJseSBpbnRlcmVzdGluZy4gU3BlY2lmaWNhbGx5LCB0aGF0IGxpbmUgYGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihkZXYsIHBoeWRldiwgc2l6ZW9mKCpzaGFyZWRfcHJpdikpO2AuIFRoaXMgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IGBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW5gIGlzIGRvaW5nLiBUaGlzIHNlZW1zIHRvIGJlIHRoZSBrZXkgc3RlcCBpbiBoYW5kbGluZyB0aGUgUEhZIGFzc29jaWF0aW9uLiBGcm9tIGhlcmUgSSBuZWVkIHRvIGxvb2sgYXQgd2hhdCBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCBkb2VzIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgUEhZIElELCBhbmQgdGhlbiBob3cgdGhhdCBpbXBhY3RzIHRoZSBlbnRpcmUgZW11bGF0ZWQgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODI2OCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowMDozNS41Mjc2NzQ5OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDgxMTMyNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGV2bV9vZl9waHlfcGFja2FnZV9qb2luXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz00NjM4PXN0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDY0My1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6NDY0NDpcXHRyZXQgPSBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oZGV2LCBwaHlkZXYsIHNpemVvZigqc2hhcmVkX3ByaXYpKTtcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNDY0NS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM9NDA1PUVYUE9SVF9TWU1CT0xfR1BMKGRldm1fcGh5X3BhY2thZ2Vfam9pbik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy00MDctLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM6NDA4OiAqIGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbiAtIHJlc291cmNlIG1hbmFnZWQgb2ZfcGh5X3BhY2thZ2Vfam9pbigpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDA5LSAqIEBkZXY6IGRldmljZSB0aGF0IGlzIHJlZ2lzdGVyaW5nIHRoaXMgUEhZIHBhY2thZ2VcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTQxNi0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYzo0MTc6aW50IGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDE4LVxcdFxcdFxcdCAgICAgc2l6ZV90IHByaXZfc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTQzOC19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmM6NDM5OkVYUE9SVF9TWU1CT0xfR1BMKGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmMtNDQwLVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oPTMyPWludCBkZXZtX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaC0zMy1cXHRcXHRcXHQgIGludCBiYXNlX2FkZHIsIHNpemVfdCBwcml2X3NpemUpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaDozNDppbnQgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvcGh5bGliLmgtMzUtXFx0XFx0XFx0ICAgICBzaXplX3QgcHJpdl9zaXplKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYz02OTQ9c3RhdGljIGludCBxY2E4MDd4X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcWNvbS9xY2E4MDd4LmMtNzAxLVxcbmRyaXZlcnMvbmV0L3BoeS9xY29tL3FjYTgwN3guYzo3MDI6XFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCBzaXplb2YoKnNoYXJlZF9wcml2KSk7XFxuZHJpdmVycy9uZXQvcGh5L3Fjb20vcWNhODA3eC5jLTcwMy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYz0xOTU9c3RhdGljIGludCBhY3gwMF9lcGh5X2luaXRfcGFja2FnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYy0yMzUtXFxuZHJpdmVycy9uZXQvcGh5L3hwb3dlcnMvYWN4MDAuYzoyMzY6XFx0cmV0ID0gZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKGRldiwgcGh5ZGV2LCAwKTtcXG5kcml2ZXJzL25ldC9waHkveHBvd2Vycy9hY3gwMC5jLTIzNy1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowMDozNy4wMzU3OTQ2MzRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NTY3NjQ0NTgyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbmAqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMuIEknbSBnb2luZyB0byBncmFiIHRoYXQgYGRldm1fb2ZfcGh5X3BhY2thZ2Vfam9pbmAgZnVuY3Rpb24gZnJvbSBgZHJpdmVycy9uZXQvcGh5L3BoeV9wYWNrYWdlLmNgIHVzaW5nIHRoZSByZWFkLWZpbGUgY29tbWFuZC4gVGhpcyBpcyBwcm9iYWJseSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBkZXZpY2UtbWFuYWdlZCBQSFkgcGFja2FnZSBqb2luaW5nIHByb2Nlc3Mgd29ya3MuIEkgd2FudCB0byBzZWUgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyBhc3NvY2lhdGluZyBQSFlzIHdpdGggdGhlIHJlbGV2YW50IGRldmljZXMsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgZGV2aWNlIHRyZWUgY29uZmlndXJhdGlvbnMuIFRoaXMgZnVuY3Rpb24gbGlrZWx5IG1hbmFnZXMgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHdoZW4gUEhZIHBhY2thZ2VzIGFyZSBpbnRlZ3JhdGVkLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDE3MywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjAwOjQyLjcxMjI0MzA0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDAwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0MDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0MDU6XFx0RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9waHlfcGFja2FnZV9qb2luKTtcXG4gNDA2OlxcdFxcbiA0MDc6XFx0LyoqXFxuIDQwODpcXHQgKiBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4gLSByZXNvdXJjZSBtYW5hZ2VkIG9mX3BoeV9wYWNrYWdlX2pvaW4oKVxcbiA0MDk6XFx0ICogQGRldjogZGV2aWNlIHRoYXQgaXMgcmVnaXN0ZXJpbmcgdGhpcyBQSFkgcGFja2FnZVxcbiA0MTA6XFx0ICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0XFxuIDQxMTpcXHQgKiBAcHJpdl9zaXplOiBpZiBub24temVybyBhbGxvY2F0ZSB0aGlzIGFtb3VudCBvZiBieXRlcyBmb3IgcHJpdmF0ZSBkYXRhXFxuIDQxMjpcXHQgKlxcbiA0MTM6XFx0ICogTWFuYWdlZCBvZl9waHlfcGFja2FnZV9qb2luKCkuIFNoYXJlZCBzdG9yYWdlIGZldGNoZWQgYnkgdGhpcyBmdW5jdGlvbixcXG4gNDE0OlxcdCAqIHBoeV9wYWNrYWdlX2xlYXZlKCkgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgb24gZHJpdmVyIGRldGFjaC4gU2VlXFxuIDQxNTpcXHQgKiBvZl9waHlfcGFja2FnZV9qb2luKCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uXFxuIDQxNjpcXHQgKi9cXG4gNDE3OlxcdGludCBkZXZtX29mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbiA0MTg6XFx0XFx0XFx0XFx0ICAgICBzaXplX3QgcHJpdl9zaXplKVxcbiA0MTk6XFx0e1xcbiA0MjA6XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKipwdHI7XFxuIDQyMTpcXHRcXHRpbnQgcmV0O1xcbiA0MjI6XFx0XFxuIDQyMzpcXHRcXHRwdHIgPSBkZXZyZXNfYWxsb2MoZGV2bV9waHlfcGFja2FnZV9sZWF2ZSwgc2l6ZW9mKCpwdHIpLFxcbiA0MjQ6XFx0XFx0XFx0XFx0ICAgR0ZQX0tFUk5FTCk7XFxuIDQyNTpcXHRcXHRpZiAoIXB0cilcXG4gNDI2OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA0Mjc6XFx0XFxuIDQyODpcXHRcXHRyZXQgPSBvZl9waHlfcGFja2FnZV9qb2luKHBoeWRldiwgcHJpdl9zaXplKTtcXG4gNDI5OlxcdFxcbiA0MzA6XFx0XFx0aWYgKCFyZXQpIHtcXG4gNDMxOlxcdFxcdFxcdCpwdHIgPSBwaHlkZXY7XFxuIDQzMjpcXHRcXHRcXHRkZXZyZXNfYWRkKGRldiwgcHRyKTtcXG4gNDMzOlxcdFxcdH0gZWxzZSB7XFxuIDQzNDpcXHRcXHRcXHRkZXZyZXNfZnJlZShwdHIpO1xcbiA0MzU6XFx0XFx0fVxcbiA0MzY6XFx0XFxuIDQzNzpcXHRcXHRyZXR1cm4gcmV0O1xcbiA0Mzg6XFx0fVxcbiA0Mzk6XFx0RVhQT1JUX1NZTUJPTF9HUEwoZGV2bV9vZl9waHlfcGFja2FnZV9qb2luKTtcXG4gNDQwOlxcdFxcbiA0NDE6XFx0TU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJQSFkgcGFja2FnZSBzdXBwb3J0XFxcIik7XFxuIDQ0MjpcXHRNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjAwOjQyLjcxMjMxOTk5MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTUzMDkwMjk4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkFuYWx5emluZyB0aGUgYG9mX3BoeV9wYWNrYWdlX2pvaW5gIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgYG9mX3BoeV9wYWNrYWdlX2pvaW5gLCB3aGF0J3MgKnRoYXQqIGFib3V0P1wiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGluIHRoaXMgc3lzdGVtLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCBpdCBwcm9iYWJseSByZWxhdGVzIHRvIHNvbWUgZnVuZGFtZW50YWwgYXNwZWN0IG9mIHRoZSBQSFkgbGF5ZXIsIHBlcmhhcHMgZGVhbGluZyB3aXRoIHRoZSBhZ2dyZWdhdGlvbiwgZGVhZ2dyZWdhdGlvbiwgb3IgY29vcmRpbmF0aW9uIG9mIHBoeXNpY2FsIGxheWVyIGRhdGEgdW5pdHMuIEdpdmVuIHRoZSBuYW1lLCBcImpvaW5cIiBpcyBhIHN0cm9uZyBpbmRpY2F0b3IgdGhhdCB0aGlzIHdpbGwgaW52b2x2ZSBzb21lIGZvcm0gb2YgYXNzZW1ibHkgb3IgY29tYmluaW5nIG9mIGVsZW1lbnRzLiBJcyBpdCByZWxhdGVkIHRvIGJ1cnN0IGFzc2VtYmx5LCBmcmFtZSBjb25jYXRlbmF0aW9uLCBwZXJoYXBzIHNvbWUgaGlnaGVyLWxldmVsIG11bHRpcGxleGluZyBzY2hlbWU/IFRoZSBgb2ZgIHByZWZpeCBzdWdnZXN0cyBpdCdzIGEgcGFydCBvZiBPcGVuRmxvdywgc28gSSBzaG91bGQgYmUgbG9va2luZyBhdCBob3cgdGhpcyBmaXRzIHdpdGhpbiB0aGUgT3BlbkZsb3cgcHJvdG9jb2wncyBhYnN0cmFjdGlvbiBvZiB0aGUgUEhZIGxheWVyLiBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgT3BlbkZsb3cgc3BlY2lmaWNhdGlvbnMgYW5kIGhvdyBQSFkgaW50ZXJhY3Rpb25zIGFyZSB0eXBpY2FsbHkgaGFuZGxlZCBpbiB0aGlzIGVudmlyb25tZW50LiBXaGF0IGFyZSB0aGUgZGVwZW5kZW5jaWVzPyBXaGVyZSBkb2VzIHRoaXMgZnVuY3Rpb24gZ2V0IGNhbGxlZD8gQW5kLCBjcml0aWNhbGx5LCB3aGF0IGFyZSB0aGUgdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gZGF0YSBmbG93cyB0aGlzIGZ1bmN0aW9uIGltcGFjdHM/IFJpZ2h0LCBJIG5lZWQgdG8gbG9vayBpbnRvIGl0IHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW91ciFcblxuXG4iLCJJbnB1dFRva2VucyI6NDA5NjYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjAxOjAyLjI0MzIyOTU1OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkzNDA0NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IG9mX3BoeV9wYWNrYWdlX2pvaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jPTI3Nj1FWFBPUlRfU1lNQk9MX0dQTChwaHlfcGFja2FnZV9qb2luKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfcGFja2FnZS5jLTI5Ny0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYzoyOTg6aW50IG9mX3BoeV9wYWNrYWdlX2pvaW4oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc2l6ZV90IHByaXZfc2l6ZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuYy0yOTkte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpYi5oPTI5PWludCBwaHlfcGFja2FnZV9qb2luKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBiYXNlX2FkZHIsIHNpemVfdCBwcml2X3NpemUpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaWIuaDozMDppbnQgb2ZfcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzaXplX3QgcHJpdl9zaXplKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGliLmgtMzEtdm9pZCBwaHlfcGFja2FnZV9sZWF2ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDE6MDIuMjkyNTc1NzAxWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0ODMxNTc2ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQSFkgUGFja2FnZSBKb2luIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBnb2luZyB0byBwdWxsIHVwIGBkcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuY2AgYW5kIHplcm8gaW4gb24gdGhhdCBgb2ZfcGh5X3BhY2thZ2Vfam9pbmAgZnVuY3Rpb24gYXJvdW5kIGxpbmUgMjk4LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc3lzdGVtIGlzIGhhbmRsaW5nIHRoZSBpbnRlZ3JhdGlvbiBvZiB0aGVzZSBQSFkgcGFja2FnZXMsIHBhcnRpY3VsYXJseSB3aXRoIHRoZSBkZXZpY2UgdHJlZSBpbnRlZ3JhdGlvbi4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIHRoZSBjb3JlIG9mIGJyaW5naW5nIHRoZXNlIFBIWXMgaW50byB0aGUgc3lzdGVtIGFmdGVyIHRoZXkndmUgYmVlbiBkZXNjcmliZWQgYnkgdGhlIGRldmljZSB0cmVlLiBJJ20gbG9va2luZyBmb3IgdGhlIHJlZ2lzdHJhdGlvbiwgYmluZGluZywgb3IgaW5pdGlhbGl6YXRpb24gbG9naWMuIFRoaXMgbGlrZWx5IGhhbmRsZXMgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBQSFkgZHJpdmVyIGl0c2VsZiBhbmQgdGhlIGRldmljZSB0cmVlIGluZm9ybWF0aW9uLiBJJ20gY3VyaW91cyBpZiBpdCdzIHJlc3BvbnNpYmxlIGZvciByZXNvdXJjZSBhbGxvY2F0aW9uLCBJUlEgc2V0dXAsIG9yIHByb2JpbmcgdGhlIFBIWSdzIGNhcGFiaWxpdGllcyBiYXNlZCBvbiB3aGF0J3MgZGVjbGFyZWQgaW4gdGhlIGRldmljZSB0cmVlIG5vZGUuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgZXhhY3RseSBob3cgaXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQxNTEzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDE6MDUuNzc1NzM1ODMxWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjgxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X3BhY2thZ2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTU6XFx0ICogbm9kZSBpcyBub3QgZGV0ZWN0ZWQgb3IgaXMgbm90IHZhbGlkIG9yIGRvZXNuJ3QgbWF0Y2ggdGhlIGV4cGVjdGVkIG5vZGVcXG4gMjk2OlxcdCAqIG5hbWUgZm9yIFBIWSBwYWNrYWdlLlxcbiAyOTc6XFx0ICovXFxuIDI5ODpcXHRpbnQgb2ZfcGh5X3BhY2thZ2Vfam9pbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBzaXplX3QgcHJpdl9zaXplKVxcbiAyOTk6XFx0e1xcbiAzMDA6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5vZl9ub2RlO1xcbiAzMDE6XFx0XFx0c3RydWN0IGRldmljZV9ub2RlICpwYWNrYWdlX25vZGU7XFxuIDMwMjpcXHRcXHR1MzIgYmFzZV9hZGRyO1xcbiAzMDM6XFx0XFx0aW50IHJldDtcXG4gMzA0OlxcdFxcbiAzMDU6XFx0XFx0aWYgKCFub2RlKVxcbiAzMDY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDMwNzpcXHRcXG4gMzA4OlxcdFxcdHBhY2thZ2Vfbm9kZSA9IG9mX2dldF9wYXJlbnQobm9kZSk7XFxuIDMwOTpcXHRcXHRpZiAoIXBhY2thZ2Vfbm9kZSlcXG4gMzEwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzMTE6XFx0XFxuIDMxMjpcXHRcXHRpZiAoIW9mX25vZGVfbmFtZV9lcShwYWNrYWdlX25vZGUsIFxcXCJldGhlcm5ldC1waHktcGFja2FnZVxcXCIpKSB7XFxuIDMxMzpcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbiAzMTQ6XFx0XFx0XFx0Z290byBleGl0O1xcbiAzMTU6XFx0XFx0fVxcbiAzMTY6XFx0XFxuIDMxNzpcXHRcXHRpZiAob2ZfcHJvcGVydHlfcmVhZF91MzIocGFja2FnZV9ub2RlLCBcXFwicmVnXFxcIiwgXFx1MDAyNmJhc2VfYWRkcikpIHtcXG4gMzE4OlxcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuIDMxOTpcXHRcXHRcXHRnb3RvIGV4aXQ7XFxuIDMyMDpcXHRcXHR9XFxuIDMyMTpcXHRcXG4gMzIyOlxcdFxcdHJldCA9IHBoeV9wYWNrYWdlX2pvaW4ocGh5ZGV2LCBiYXNlX2FkZHIsIHByaXZfc2l6ZSk7XFxuIDMyMzpcXHRcXHRpZiAocmV0KVxcbiAzMjQ6XFx0XFx0XFx0Z290byBleGl0O1xcbiAzMjU6XFx0XFxuIDMyNjpcXHRcXHRwaHlkZXYtXFx1MDAzZXNoYXJlZC1cXHUwMDNlbnAgPSBwYWNrYWdlX25vZGU7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdHJldHVybiAwO1xcbiAzMjk6XFx0ZXhpdDpcXG4gMzMwOlxcdFxcdG9mX25vZGVfcHV0KHBhY2thZ2Vfbm9kZSk7XFxuIDMzMTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAzMzI6XFx0fVxcbiAzMzM6XFx0RVhQT1JUX1NZTUJPTF9HUEwob2ZfcGh5X3BhY2thZ2Vfam9pbik7XFxuIDMzNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDE6MDUuNzc1ODQwNzkxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjc0NjUyMDUwNTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgb2ZfcGh5X3BhY2thZ2Vfam9pbmAgRnVuY3Rpb24gYW5kIEl0cyBJbXBsaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEknbSBsb29raW5nIGF0IHRoaXMgYG9mX3BoeV9wYWNrYWdlX2pvaW5gIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0J3MgdXNlZCB3aXRoIGB5dDg4MjRgLiBUaGUgY29kZSBmaXJzdCBncmFicyB0aGUgZGV2aWNlIG5vZGUgZnJvbSBgcGh5ZGV2LVx1MDAzZW1kaW8uZGV2Lm9mX25vZGVgLiBJZiB0aGlzIGlzIE5VTEwsIHdoaWNoIEknbSBhc3N1bWluZyBpcyB0aGUgdHlwaWNhbCBzY2VuYXJpbyB3aXRob3V0IERldmljZVRyZWUgKGxpa2Ugb24geDg2L2FtZDY0IHN5c3RlbXMgd2hlbiB1c2luZyBNRElPIHNjYW5uaW5nIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgVVNCKSwgaXQgaW1tZWRpYXRlbHkgcmV0dXJucyBgLUVJTlZBTGAuXG5cbkFuZCB0aGVuIGxvb2sgYXQgYHl0ODgyNF9wcm9iZWA6ICBJZiBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCByZXR1cm5zIGAtRUlOVkFMYCwgdGhlIGB5dDg4MjRfcHJvYmVgIGZ1bmN0aW9uICppbW1lZGlhdGVseSogcmV0dXJucy4gU28sIGJhc2ljYWxseSwgaWYgdGhlIGRldmljZSBub2RlIGxvb2t1cCBmYWlscywgdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiBqdXN0IGJhaWxzIG91dC4gVGhpcyBtZWFucyBub25lIG9mIHRoZSBgeXQ4ODI0XypgIGZ1bmN0aW9ucyB3aWxsIGV2ZXIgZ2V0IGNhbGxlZCFcblxuTm93LCB0aGUgcXVlc3Rpb24gYmVjb21lczogaXMgRGV2aWNlVHJlZSBldmVuICphdmFpbGFibGUqIG9uIHg4Nl82NCwgZXNwZWNpYWxseSB3aXRoaW4gc29tZXRoaW5nIGxpa2Ugc3l6a2FsbGVyPyAgTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IG9uIGFtZDY0LCBBQ1BJIGlzIHRoZSBzdGFuZGFyZCBhbmQgT3BlbkZpcm13YXJlL0RldmljZVRyZWUgKGBDT05GSUdfT0ZgKSBpcyB0eXBpY2FsbHkgZGlzYWJsZWQgb3IgYWJzZW50LCBlc3BlY2lhbGx5IHRob3NlIGBldGhlcm5ldC1waHktcGFja2FnZWAgbm9kZXMuIEknbSByZWFzb25hYmx5IHN1cmUgc3l6a2FsbGVyIHJ1bnMgYSBzdGFuZGFyZCBhbWQ2NCBrZXJuZWwgaW4gUUVNVSAqd2l0aG91dCogRFQuXG5cbkp1c3QgdG8gYmUgc3VyZSwgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIChgQ09ORklHX09GYCkgb24geDg2L2FtZDY0Li4uIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBpbmRlZWQgZGlzYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyMzUwLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDE6MTMuMjQxMDQ4NThaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NTQyODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPRlxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvb2ZcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9vZi9LY29uZmlnPTg9Y29uZmlnIEJVSUxUSU5fRFRCX0FMTFxcbi0tXFxuZHJpdmVycy9vZi9LY29uZmlnLTEwLVxcbmRyaXZlcnMvb2YvS2NvbmZpZzoxMTptZW51Y29uZmlnIE9GXFxuZHJpdmVycy9vZi9LY29uZmlnLTEyLVxcdGJvb2wgXFxcIkRldmljZSBUcmVlIGFuZCBPcGVuIEZpcm13YXJlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjAxOjEzLjI4ODU5NTc3MloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNzMzODY1NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqRGVsdmluZyBpbnRvIHRoZSBNb3RvcmNvbW0gWVQ4ODI0KipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZCEgQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byBjb25maXJtIHNvbWV0aGluZyAqcmVhbGx5KiBmdW5kYW1lbnRhbDogaXMgdGhlIE1vdG9yY29tbSBZVDg4MjQgYWN0dWFsbHkgYSBwaHlzaWNhbCBoYXJkd2FyZSBFdGhlcm5ldCBQSFk/IFRoZSBwYXRjaCBkb2N1bWVudGF0aW9uICpzaG91bGQqIGNsYXJpZnkgdGhpcy4gQWgsIGhlcmUgd2UgZ28hIFllcywgdGhlIHBhdGNoIGV4cGxpY2l0bHkgc3RhdGVzOiBcIk1vdG9yY29tbSBZVDg4MjQgRXRoZXJuZXQgUEhZIGlzIGEgUEhZIHBhY2thZ2Ugb2YgNCBQSFlzLlwiIEV4Y2VsbGVudC4gQW5kIGl0IGNvbnRpbnVlcywgXCJFbmFibGVzIHN1cHBvcnQgZm9yIE1vdG9yY29tbSBuZXR3b3JrIFBIWXMuIEN1cnJlbnRseSBzdXBwb3J0cyBZVDg1eHggR2lnYWJpdCBFdGhlcm5ldCBQSFlzIGFuZCBZVDg4MjQgNCAqIDIuNUcgUEhZLlwiIFRoYXQncyBnb29kIGNvbmZpcm1hdGlvbi5cblxuTm93LCBhIG5ldyBkZXRhaWwgc3VyZmFjZXMgaW4gdGhlIGNvZGUgd2hpY2ggSSBuZWVkIHRvIGdldCBteSBoZWFkIGFyb3VuZC4gV2hhdCBhYm91dCB0aGlzIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCB0aGluZyB0aGF0IHdhcyBhZGRlZCBpbiBgZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuY2A/IFdoZXJlIGV4YWN0bHkgaXMgdGhhdCBmdW5jdGlvbiBjYWxsZWQgZnJvbSB3aXRoaW4gdGhlIGtlcm5lbCdzIEV0aGVybmV0IFBIWSBkcml2ZXIgc3RydWN0dXJlPyBUaW1lIHRvIHVzZSBteSBmYXZvcml0ZSB0b29sOiBncmVwcGVyISBJJ2xsIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQzMzAyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjAxOjE3LjAyMjQ2MzcyMloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwOTQwMzE5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz03Nzc9c3RhdGljIGludCB5dDg4MjRfdXRwX2ludmFsaWRfdGVzdF9tb2RlX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg0LVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzo3ODU6XFx0cmV0dXJuIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtNzg2LVxcdFxcdChwaHlkZXYsIE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFXzEpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTg0MD1zdGF0aWMgaW50IHl0ODgyNF91dHBfbm9ybWFsX3Rlc3RfbW9kZV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTg0Ny1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6ODQ4OlxcdHJldHVybiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtODQ5LVxcdFxcdFxcdFxcdFxcdCAgICBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jPTk3OD1zdGF0aWMgaW50IHl0ODgyNF9leHRlcm5fY29uZmlnX3V0cF9pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTIzMS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTIzMjpcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldiwgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfMSk7XFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyMzMtXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI0NC1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTI0NTpcXHRyZXQgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI0Ni1cXHRcXHRcXHRcXHRcXHQgICBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV9OT1JNQUwpO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTEyNTctZXJyX3Jlc3RvcmVfbm9ybWFsOlxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxMjU4OlxcdHIgPSBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHBoeWRldixcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTI1OS1cXHRcXHRcXHRcXHRcXHQgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYz0xNTE3PXN0YXRpYyBpbnQgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcwMS1cXHRcXHRnb3RvIGVycl9yZXN0b3JlO1xcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYzoxNzAyOlxcdHJldCA9IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUocGh5ZGV2LCBNRElPX1BNQV8xMEdCVF9URVNUTU9ERV8xKTtcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMtMTcwMy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MTQtXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jOjE3MTU6XFx0cmV0ID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MTYtXFx0XFx0XFx0XFx0XFx0ICAgTURJT19QTUFfMTBHQlRfVEVTVE1PREVfTk9STUFMKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYy0xNzI4LWVycl9yZXN0b3JlX25vcm1hbDpcXG5kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmM6MTcyOTpcXHRyID0gZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZShwaHlkZXYsXFxuZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jLTE3MzAtXFx0XFx0XFx0XFx0XFx0IE1ESU9fUE1BXzEwR0JUX1RFU1RNT0RFX05PUk1BTCk7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jPTE0MDk9RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV9mYXN0X3JldHJhaW4pO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDExLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmM6MTQxMjogKiBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlIC0gY29uZmlndXJlIHRlbXBsYXRlIHRlc3Rtb2RlIHJlZ2lzdGVyc1xcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQxMy0gKiBAcGh5ZGV2OiB0YXJnZXQgcGh5X2RldmljZSBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHktYzQ1LmMtMTQyMC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jOjE0MjE6aW50IGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHRlc3RfbW9kZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLTE0MjIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDMyLX1cXG5kcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jOjE0MzM6RVhQT1JUX1NZTUJPTF9HUEwoZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy0xNDM0LVxcbi0tXFxuaW5jbHVkZS9saW51eC9waHkuaD0yMzU5PWludCBnZW5waHlfYzQ1X2Zhc3RfcmV0cmFpbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBib29sIGVuYWJsZSk7XFxuaW5jbHVkZS9saW51eC9waHkuaDoyMzYwOmludCBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCB0ZXN0X21vZGUpO1xcbmluY2x1ZGUvbGludXgvcGh5LmgtMjM2MS1pbnQgZ2VucGh5X2M0NV9wbGNhX2dldF9jZmcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDE6MTguNTMxODczNTY5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjExMjM1OTY0MDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYG1vdG9yY29tbS5jYCBDaGFuZ2VzKipcblxuT2theSwgc28gYGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGVgIGlzICpvbmx5KiBjYWxsZWQgYnkgdGhlIHl0ODgyNCBmdW5jdGlvbnMgaW4gYG1vdG9yY29tbS5jYC4gVGhhdCdzIGdvb2QgdG8ga25vdy4gQnV0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgZ29pbmcgb24gd2l0aCBgeXRwaHlfc2V0X3dvbGAgYWxzbyBpbiBgbW90b3Jjb21tLmNgLiBMZXQncyBqdW1wIGludG8gbGluZXMgNjIyLTYzMiBvZiBgbW90b3Jjb21tLmNgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBmdW5jdGlvbidzIHN0cnVjdHVyZS4gQWgsIGFuZCB3aGF0IHdhcyB0aGF0IHBhdGNoJ3MgaW1wYWN0IG9uIGB5dHBoeV9zZXRfd29sYD8gVGltZSB0byBwdWxsIHVwIHRoZSBgZ2l0IGRpZmZgIGZvciB0aGF0IGZ1bmN0aW9uIGluIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLlxuXG5IbW0sIHRoaXMgbG9va3MgaW50ZXJlc3RpbmcuIEl0IHNlZW1zIGxpa2UgdGhlIHBhdGNoIHNpbXBseSBhZGRlZCB0aGUgbGluZSBgaWYgKHJldCBcdTAwM2MgMCkgZ290byBlcnJfcmVzdG9yZV9wYWdlO2AgcmlnaHQgYWZ0ZXIgZGlzYWJsaW5nIHRoZSBXT0wgaW50ZXJydXB0LiBUaGlzIGxvb2tzIGxpa2UgYSBzdGFuZGFyZCBlcnJvciBoYW5kbGluZyBwcm9jZWR1cmUuIExldCdzIG1ha2Ugc3VyZSwgaG93ZXZlciwgYW5kIHJldmlldyB0aGUgY29kZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjaGFuZ2UgaW4gYHl0cGh5X3NldF93b2xgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTA2MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQxMTowMToyOS43Njc4NDA1MzFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg0MDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MDAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3MDA6XFx0XFx0XFx0dmFsID0gWVRQSFlfV0NSX0VOQUJMRSB8IFlUUEhZX1dDUl9JTlRSX1NFTDtcXG4gNzAxOlxcdFxcdFxcdHZhbCB8PSBZVFBIWV9XQ1JfVFlQRV9QVUxTRSB8IFlUUEhZX1dDUl9QVUxTRV9XSURUSF82NzJNUztcXG4gNzAyOlxcdFxcdFxcdHJldCA9IHl0cGh5X21vZGlmeV9leHQocGh5ZGV2LCBZVFBIWV9XT0xfQ09ORklHX1JFRywgbWFzaywgdmFsKTtcXG4gNzAzOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA3MDQ6XFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbiA3MDU6XFx0XFxuIDcwNjpcXHRcXHRcXHQvKiBFbmFibGUgV09MIGludGVycnVwdCAqL1xcbiA3MDc6XFx0XFx0XFx0cmV0ID0gX19waHlfbW9kaWZ5KHBoeWRldiwgWVRQSFlfSU5URVJSVVBUX0VOQUJMRV9SRUcsIDAsXFxuIDcwODpcXHRcXHRcXHRcXHRcXHQgICBZVFBIWV9JRVJfV09MKTtcXG4gNzA5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA3MTA6XFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbiA3MTE6XFx0XFxuIDcxMjpcXHRcXHR9IGVsc2Uge1xcbiA3MTM6XFx0XFx0XFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg1MjFfUlNTUl9VVFBfU1BBQ0UpO1xcbiA3MTQ6XFx0XFx0XFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4gNzE1OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4gNzE2OlxcdFxcbiA3MTc6XFx0XFx0XFx0LyogRGlzYWJsZSBXT0wgZmVhdHVyZSAqL1xcbiA3MTg6XFx0XFx0XFx0bWFzayA9IFlUUEhZX1dDUl9FTkFCTEUgfCBZVFBIWV9XQ1JfSU5UUl9TRUw7XFxuIDcxOTpcXHRcXHRcXHRyZXQgPSB5dHBoeV9tb2RpZnlfZXh0KHBoeWRldiwgWVRQSFlfV09MX0NPTkZJR19SRUcsIG1hc2ssIDApO1xcbiA3MjA6XFx0XFxuIDcyMTpcXHRcXHRcXHQvKiBEaXNhYmxlIFdPTCBpbnRlcnJ1cHQgKi9cXG4gNzIyOlxcdFxcdFxcdHJldCA9IF9fcGh5X21vZGlmeShwaHlkZXYsIFlUUEhZX0lOVEVSUlVQVF9FTkFCTEVfUkVHLFxcbiA3MjM6XFx0XFx0XFx0XFx0XFx0ICAgWVRQSFlfSUVSX1dPTCwgMCk7XFxuIDcyNDpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNzI1OlxcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4gNzI2OlxcdFxcdH1cXG4gNzI3OlxcdFxcbiA3Mjg6XFx0ZXJyX3Jlc3RvcmVfcGFnZTpcXG4gNzI5OlxcdFxcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuIDczMDpcXHR9XFxuIDczMTpcXHRcXG4gNzMyOlxcdC8qKlxcbiA3MzM6XFx0ICogeXQ4ODI0X3JlYWRfcGFnZSgpIC0gcmVhZCBQSFk4ODI0IHJlZyBwYWdlXFxuIDczNDpcXHQgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4gNzM1OlxcdCAqXFxuIDczNjpcXHQgKiBSZXR1cm5zOiBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX1VTWEdNSUlfU1BBQ0UvXFxuIDczNzpcXHQgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4gNzM4OlxcdCAqL1xcbiA3Mzk6XFx0c3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjAxOjI5Ljc2ODAyNzE1MVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTMzNDMyMDU1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBQYXRjaCBSZWFjaGFiaWxpdHkgaW4gYSBGdXp6aW5nIENvbnRleHQqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCB3YXMgYWJvdXQgdGhlIHBvaW50bGVzcyBhZGRpdGlvbiBpbiBgeXRwaHlfc2V0X3dvbGAuIEVzc2VudGlhbGx5LCBpdCBhZGRlZCBhIGNoZWNrIHRoYXQgd2FzIGFscmVhZHkgaW1wbGljaXRseSB0aGVyZSwgYSBjbGFzc2ljIG5vLW9wLiBCdXQgdGhlIGNvcmUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgY2hhbmdlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY2AgYXJlIGFjY2Vzc2libGUgdmlhIGZ1enppbmcuXG5cbk15IHByaW1hcnkgY29uY2Vybiwgd2hpY2ggSSBuZWVkIHRvIHJlc29sdmUsIGlzIHdoZXRoZXIgaXQgaXMgXCJTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmUuXCIgSSdtIHZlcnkgZmFtaWxpYXIgd2l0aCB0aGUgZnV6emluZyBlbnZpcm9ubWVudCwgc28gbGV0J3MgdXNlIHRoYXQga25vd2xlZGdlIGhlcmU6IFNwZWNpZmljYWxseSwgd2hldGhlciB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkgZHJpdmVyICpyZXF1aXJlcyogcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpc24ndCBlbXVsYXRlZCBieSB0aGUgc3RhbmRhcmQgUUVNVSBzZXR1cCBJJ20gdGVzdGluZyB3aXRoLlxuXG5JIGtub3cgdGhhdCBQSFkgZHJpdmVycywgYnkgZGVmaW5pdGlvbiwgbWFuYWdlIGV4dGVybmFsIEV0aGVybmV0IHRyYW5zY2VpdmVyIGNoaXBzLiBUaGUgWVQ4ODI0IGlzIHN1Y2ggYSBjaGlwIGZyb20gYSByZWFsIHNlbWljb25kdWN0b3IgY29tcGFueS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IFFFTVUgb24geDg2L2FtZDY0IGVtdWxhdGVzIEludGVsIChlMTAwMC9lMTAwMGUpLCBWaXJ0aW8sIGFuZCBSZWFsdGVrIGhhcmR3YXJlLCBidXQgbm9uZSBvZiB0aGVzZSB1c2UgUEhZcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5IHRoZSBrZXJuZWwncyBwaHlsaWIuIFRoZXJlZm9yZSwgbm8gcGh5c2ljYWwgTURJTyBidXMgKHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCBQSFlzKSBpcyBlbXVsYXRlZCwgbWFraW5nIHRoaXMgYW4gaW1tZWRpYXRlIHJlZCBmbGFnLlxuXG5UaGUgY3JpdGljYWwgcGllY2UgaGVyZSBpcyB0aGUgdXNlIG9mIERldmljZSBUcmVlIChEVCkuIFRoZSBgeXQ4ODI0X3Byb2JlYCBmdW5jdGlvbiAqZXhwbGljaXRseSogdXNlcyBgZGV2bV9vZl9waHlfcGFja2FnZV9qb2luYCBhbmQgZXhwZWN0cyBhbiBcImV0aGVybmV0LXBoeS1wYWNrYWdlXCIgbm9kZSBpbiB0aGUgRFQuIFdpdGhvdXQgRFQsIG9yIGEgc3BlY2lmaWMgRFQgYmluZGluZyBmb3IgYSBtb3RvcmNvbW0gWVQ4ODI0LCB0aGUgcHJvYmUgZmFpbHMgaW1tZWRpYXRlbHkuIEV2ZW4gaWYgYSBtb2NrIE1ESU8gYnVzIHdlcmUgc29tZWhvdyB0cmlnZ2VyZWQsIHRoZSBkcml2ZXIgd291bGQgZmFpbCBhcyB0aGUgT0Ygbm9kZSBpcyBleHBlY3RlZCB0byBiZSBwcmVzZW50LCBhbmQgaXQgaXMgbm90IGluIHRoZSBjb250ZXh0IG9mIGFtZDY0ICsgc3RhbmRhcmQgUUVNVS5cblxuRnVydGhlcm1vcmUsIGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCB3aXRoaW4gdGhpcyBkcml2ZXIgYXBwZWFycyB0byBiZSAqZXhjbHVzaXZlbHkqIGNhbGxlZCBieSB0aGlzIGRyaXZlcjsgbm8gb3RoZXIga2VybmVsIGNvZGUgY2FsbHMgaXQuIE1lYW5pbmcgdGhhdCwgdGhpcyBwYXRjaCBpcyBvbmx5IHJlbGV2YW50IHRvIHBoeXNpY2FsIE1vdG9yY29tbSBoYXJkd2FyZSB3aXRoIHNwZWNpZmljIERldmljZSBUcmVlIGNvbmZpZ3VyYXRpb25zLlxuXG5UaGUgY2hhbmdlcyBpbiBgeXRwaHlfc2V0X3dvbGAgYXJlIHVsdGltYXRlbHkgaW5jb25zZXF1ZW50aWFsOyB0aGlzIGRyaXZlciBpcyB1bnJlYWNoYWJsZSBhbnl3YXkuIEkgZ3JlcHBlZCB0aGUgY29kZWJhc2UgYW5kIGNvbmZpcm1lZCB0aGF0IGBnZW5waHlfYzQ1X3RlbXBsYXRlX3Rlc3Rtb2RlYCBpc24ndCBjYWxsZWQgYW55d2hlcmUgZWxzZS5cblxuSGVuY2UsIEkgY29uY2x1ZGUgdGhlIGNoYW5nZXMgYXJlIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSB3aXRoaW4gYSBzdGFuZGFyZCBRRU1VIGZ1enppbmcgY29udGV4dC5cblRodXMsICoqV29ydGhGdXp6aW5nID0gZmFsc2UuKipcblxuXG4iLCJJbnB1dFRva2VucyI6NDY1MTEsIk91dHB1dFRva2VucyI6MTkxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjExNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDExOjAxOjQ5LjEwMjM1MDI5MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IHF1YWQtcG9ydCAyLjVHIEV0aGVybmV0IFBIWSBpbiBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYW5kIGFkZHMgYW4gYXNzb2NpYXRlZCBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpbiBkcml2ZXJzL25ldC9waHkvcGh5LWM0NS5jLiBUaGUgbW9kaWZpZWQgY29kZSB0YXJnZXRzIGEgc3BlY2lmaWMgcGh5c2ljYWwgRXRoZXJuZXQgUEhZIHRyYW5zY2VpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgYW5kIHNwZWNpZmljIERldmljZSBUcmVlIGRlc2NyaXB0aW9uICgnZXRoZXJuZXQtcGh5LXBhY2thZ2UnKSwgd2hpY2ggaXMgbm90IHByZXNlbnQgb3IgZW11bGF0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgeDg2XzY0L1FFTVUgZnV6emluZyBlbnZpcm9ubWVudHMuIFRoZSBoZWxwZXIgZ2VucGh5X2M0NV90ZW1wbGF0ZV90ZXN0bW9kZSBpcyBzb2xlbHkgY2FsbGVkIGJ5IHRoZSBZVDg4MjQgZHJpdmVyLCBhbmQgcHJvYmUgaW1tZWRpYXRlbHkgZmFpbHMgd2l0aG91dCB0aGUgT0Ygbm9kZS4gVGhlcmVmb3JlLCB0aGUgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBxdWFkLXBvcnQgMi41RyBFdGhlcm5ldCBQSFkgaW4gZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGFuZCBhZGRzIGFuIGFzc29jaWF0ZWQgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaW4gZHJpdmVycy9uZXQvcGh5L3BoeS1jNDUuYy4gVGhlIG1vZGlmaWVkIGNvZGUgdGFyZ2V0cyBhIHNwZWNpZmljIHBoeXNpY2FsIEV0aGVybmV0IFBIWSB0cmFuc2NlaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCBzcGVjaWZpYyBEZXZpY2UgVHJlZSBkZXNjcmlwdGlvbiAoJ2V0aGVybmV0LXBoeS1wYWNrYWdlJyksIHdoaWNoIGlzIG5vdCBwcmVzZW50IG9yIGVtdWxhdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIHg4Nl82NC9RRU1VIGZ1enppbmcgZW52aXJvbm1lbnRzLiBUaGUgaGVscGVyIGdlbnBoeV9jNDVfdGVtcGxhdGVfdGVzdG1vZGUgaXMgc29sZWx5IGNhbGxlZCBieSB0aGUgWVQ4ODI0IGRyaXZlciwgYW5kIHByb2JlIGltbWVkaWF0ZWx5IGZhaWxzIHdpdGhvdXQgdGhlIE9GIG5vZGUuIFRoZXJlZm9yZSwgdGhlIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMTE6MDE6NDkuMTAyMzc1MzkxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowk8f9l[1] Phase: Running StartedAt: 2026-09-15 11:01:59 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowk8f9l[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-15 11:01:59 +0000 UTC FinishedAt: 2026-09-15 11:02:13 +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,}